I realize my three replies (including this) have been with Korona, but these aren't personal attacks =)
Korona wrote:
Carefully designed microkernels should be able to recover from driver crashes. However a microkernel alone is not sufficient to contain malicious drivers. You need an IOMMU (e.g. Intel V-d) to do that. Devices like XHCI are capable of DMA from/to arbitrary memory addresses and can thus corrupt even read-only kernel code.
First, you can use a "poor man's" IOMMU for all 32-bit devices, only use 4GiB+ range for kernel/processes and drivers use the first 4GiB. Though not a very good solution.
Alternatively you could make the "kernel" (DMA process, or something) a bit more aware and trusted, and all drivers need to route their DMA request thru it, not sure how far you can get with it.
In practice IOMMU would be by far the best solution.
Korona wrote:
Single-address space operating systems cannot be made safe without running trusted code (e.g. compiled from a managed language) only. At least this cannot be done without hardware assistance (e.g. something like segmentation + instrumentation, look up how Google's NaCl works).
If it can be done with hardware, it can be done with software, though for the general case the performance would be poor.
I think the main issue with "generic" languages isn't that they're unmanaged, it's pointers. So if you create a language without pointers it should be safe, and have good performance. You may need some unsafe parts (where pointers are allowed), and that part needs to be inspected or JIT'd, but JIT'ing isn't a requirement and neither is managed.
I would say that single-address space is by far the most different in general and I'm not sure if any real world implementations have ever really existed (outside research, excluding MS-DOS and alike, etc). I'm of course making the assumption here that it's _secure_, not MS-DOS like =)