3 ms·
> But then you find that somewhere in the lower layers of the framework/interpreter you were using there's something that relies on it. So you refrain from usi
by zvrba 9y ago
> But then you find that somewhere in the lower layers of the framework/interpreter you were using there's something that relies on it.
So you refrain from using the framework in question because the very same framework wouldn't work at all in the hypothetical VM because files do not exist there. You have to write everything from scratch using only your IPC mechanism of choice, just like with VMCALL.
> What's the difference between a unikernel sending data to the hypervisor and a process sending data to the kernel?
Ultimately, trust.
1. The developers. I have more confidence in the implementors of, say, Linux kernel, than in developers of, say, Chrome or Firefox or Safari.
2. Testing. Kernels routinely handle successfully vastly more corner-cases than web-browsers. [Yes, I see upon all of current Linux, Windows, etc. installations as continuous, live, in-production testing.]
If kernels were as shabby as today's browsers, nobody would use them for anything but toys. On the other hand, try to find a person who gets genuinely surprised when a web browser crashes.
- lmm 9y ago> So you refrain from using the framework in question because the very same framework wouldn't work at all in the hypothetical VM because files do not exist there. You have to write everything from scratch using only your IPC mechanism of choice, just like with VMCALL. It's always going to take a new standard and a new community/ecosystem that fits things into that new standard or rewrites the things that can't be fitted. The only way such an effort can ever hope to succeed is a) an extremely clear standard with a rigorous conformance test b) a way to run legacy programs that don't comply with the standard c) but in such a way that there are still incentives for programs to move onto the new way. In theory we could create a stripped-down linux that only offered one limited form of IPC and then start porting libraries and processes to run on that stripped-down linux. But it would be difficult to get a consensus on exactly what system calls etc. are allowed, and what would you do for running legacy processes? You have to add the alternative IPC systems etc. back in and add an opt-out mechanism, and then a) every component, even well-behaved ones, loses the advantages of the new system (fast booting, low overhead and so on) b) there's very little incentive for a component to ever be ported to the new system. > 1. The developers. I have more confidence in the implementors of, say, Linux kernel, than in developers of, say, Chrome or Firefox or Safari. I'm not sure where web browsers comes into it. I have a lot more confidence in the unikernel folks than the container folks from what I've seen of their tool choices and code quality. > Kernels routinely handle successfully vastly more corner-cases than web-browsers. Kernels get very little direct exposure to actively hostile userspace programs, and local privilege escalation vulnerabilities are relatively common - indeed I'd say more common than browser vulnerabilities.
- zvrba 9y ago> The only way such an effort can ever hope to succeed is a) an extremely clear standard with a rigorous conformance test VMCALL is too flexible for being able to call it a "standard". What does the original article suggest? Yeah, define a struct and pass a pointer to it. As "standard" as defining protobuf messages. Heck, even the "big" (Xen, HyperV, VMWare, VirtualBox) hypervisors don't agree on their hypercalls. The problem of having multiple incompatible OS-interfaces is repeating itself, just one level below, on the hypervisor level. Madness. Ironically, these problems would not exist had the world gone the way of IDL and microkernels. > b) a way to run legacy programs that don't comply with the standard No-go unless the VM implements all of the stuff that you want to get rid of. Plus, whatever you decide to run in a VM may want to talk to a service in another VM. How do they talk to each other? [continue the exercise until you reimplement one or more of existing IPC mechanisms].
- lmm 9y ago> Ironically, these problems would not exist had the world gone the way of IDL and microkernels. I see it as another path to a very similar end state. A unikernel running under a hypervisor is much like a process running under a microkernel. > No-go unless the VM implements all of the stuff that you want to get rid of. Legacy components can run under a traditional linux VM running under the same hypervisor. If you've got, say, a gnarly image processing piece that needs to talk to a task queue over unix domain sockets or something, you run them both in the same VM; you can get on with your business, but at the same time that doesn't impact the isolation of your other components, performance/scalability cost is only borne by the component that's causing it, so there's an adequate incentive to properly isolate that component (or maybe not - if it's not causing reliability or performance issues it can stay as it is, that's fine too). > Plus, whatever you decide to run in a VM may want to talk to a service in another VM. How do they talk to each other? In a way that's always traditionally been used for untrusted communications (e.g. network sockets), so that they know not to trust each other.
- zvrba 9y ago> In a way that's always traditionally been used for untrusted communications (e.g. network sockets), so that they know not to trust each other. So your "trusted" components now incorporate a TCP/IP or another network stack. Plus you'll somehow have to authenticate the other end...