Meta comment: your description contains a non-terminating self-reference. (It’s a little too meta!)
I think you’re absolutely right that the bitter and better positions can be reconciled. When Brooks points out the power efficiency of individual biological organisms’ “computation”, he takes for granted the hugely energy intensive (and wasteful!) training process called “evolution”. With that in the picture, the analogy with deep learning may be more productive.
Haha, the self-reference in the description was an unintentional brain-fart. Oh well, let’s pretend it was on purpose because I don’t think you can update the description text.
The evolution point is a really excellent one and a good analogy. The “evolution is computation” angle is often overlooked, including by me. Would you mind if I added a paragraph in the essay? With a little note that it was inspired by a reader, of course. :)
To the author, the article says
February 24, 2018
February 24, 2018
I suppose it should be 2019
Thanks, fixed :)
Can anybody point me to a completely barebones (cpu + memory only, no BIOS) VM implementation? IE, you give it an arbitrary binary and a load address, and it sets up a memory environment and the reset vector appropriately, and traps out to the host program at any privileged instruction (int/in/out/lmsw/etc) or unmapped memory access? I’d really like to use something like this as a basis for some experiments in secure code generation.
I’m not sure exactly what you are looking for, but it’s worth checking out Valgrind and Qemu.
Valgrind re-writes binaries (like ZeroVM / NaCL) rather than virtualising the machine, AFAIK. It could definitely be achieved by cutting a lot out of Qemu’s hypervisor code or Xen, but learning those codebases would take significantly more time than starting from zero and building what I’m after using intel’s refs, which I’m trying to skip :)
To better elaborate what I’m after - Rather than a useful vm with a bunch of (virtual) ISA controller chips listening to various ports, and emulating devices, I’m looking for the very beginning of one. Malloc a couple of MB of ram, put the binary at 0, and start a virtualised CPU with a “jmp 0:0” and wait for a HLT. Any priveleged instruction would trap out to said minimal VM and log and/or return a bogus value, or kill the vm.
The Quake VM did something like this. You can find some info at http://fabiensanglard.net/quake3/qvm.php and http://www.suse.de/~lnussel/talks/fosdem_talk_2013_q3.pdf .
Qemu’s CPU emulation would do something similar, although by default it passes syscalls through to the host OS. It doesn’t emulate a full system, and it can be used outside of the qemu system emulator to run user-space code on different architectures.