There are OSes that use the language for safety and have a single process but having to use memory safe languages is a pretty big limitation! Plus I would imagine it is easier to prove process security than language security.
https://en.wikipedia.org/wiki/Singularity_(operating_system)
https://github.com/lastweek/source-singularity/tree/master/b...
Microsoft and Oracle have removed CAS and JAAS from CLR/JVM respectively as they have failed to provided the software isolated model that was expected from them.
The point is that drivers and apps are managed code and can be software isolated, obviously some of the kernel is unsafe.
CAS was fined grain runtime model that added significant overhead and was never close to being verified, software isolation was coarse grained just like a hardware process and had much less overhead with the goal of verification, more here:
https://www.microsoft.com/en-us/research/wp-content/uploads/...
Hence why there is really no alternative to multi-processes for security critical code.
You refer to Singularity, yet after Singularity, Microsoft Research was went down the path of exploriing other alternatives.
If the security model was so great, they would have doubled down on it.
Instead, after so many interactions, the main researchers have come out with Azure Sphere, which uses C (!) with a custom Linux kernel, and all the security layers are enforced via hardware.
Conflating Java applet security with software isolated processes as implemented in Singularity is not doing a service to the research work done there. Much of the SIP design was in response to the lessons learned in Java and .Net.
The problem with SIP is everything to be isolated must be written in a managed language. That means everyone has to get on board with a managed runtime most likely GC'd. At one point MS thought they could get everyone on board to .Net but at some point they realized that wasn't going to happen and decided its better to go with the status quo of C/C++ development.
Maybe we will see a resurgence of SIP with Rust or Webassembly. The idea of verifiably safe code where all safety checks are done ahead of time by the compiler has many advantages that can't be ignored forever.
In 90s and 00s they did this with languages similar to Java because low level safe languages weren’t yet invented. If this idea ever resurfaces it will be done with languages similar to rust and will be competitive with and likely more efficient than unsafe systems. This will potentially be a nice convergence with power-efficient RISCV chips that don’t include an MMU or a supervisor mode.
Plus SIP as managed OS aren't that different from Mesa/Cedar, Lisp Machines, Smalltalk, Oberon. Modula-3.
Yes, the overrall security is way better than C and its descendants, but that doesn't make it fullproof.
Also Midori used SIP's see "Execution Model" here: http://joeduffyblog.com/2015/11/19/asynchronous-everything/
Which was my whole point since the beggining.
Yeah SIPs are nice, hardly any different from other managed OSes since the 60's, with Burroughs being the first one.
Many of those actually were used in production, while Singularity never left the crib, it died on version 2.0 with nothing more than a CLI interface.
Then everyone moved into other projects, hardly any security assessement was done to the whole stack, so how can you assert SIP capabilities to withstand a black hat attack?
SIP are a form of multiprocess designed for safety and stability reducing exploits and potentially scaling across clusters. Singularity and Midori heavily relied on message passing for IPC which would have allowed cluster scale out.
These where research projects there was plenty the security work available some of it I linked. Much of the work revolved around verifiability of the code to guarantee no cross process breakout without hardware checks.
How do you assert hardware checks can withstand a black hat attack? They obviously haven't been lately.
JAAS and CAS were also secure until black hats started to look into them, and since they are beyond repair, have now been thrown away, replaced by OS containers and multiprocesses.
You get similar guarantees to hardware checks with less overhead thats the point.
Either way you're going to want to pay bounties for bugs hardware or software. Security work is never done.
JAAS and CAS where not SIP, I am not sure why you keep trying to conflate them.
It was abandoned in 2006 and SIP were never validated in production under real attacks.
Even Midori had more real use, having powered Asian Bing subnet for a while.
To worship it in 2021 is just theory without pratical results.
Again Midori used SIP's so it was validated in production, right?
Projecting worship on to me is not productive, no need to be childish about this. All the points you bring up for software isolation exist with hardware isolation, formal verification could help both and there is a lot of work in that area.
I think software needs to become safe by default, the endless buffer overflows need to stop. If you then take the stance user land software must be written in a safe language then the need for hardware isolation might not need to exist in it's current form and thats very interesting to me, thats all.
Rust is only memory-safe and only as long as you stay away from unsafe code. It is not magic pixie dust.
1. https://github.com/paulbartrum/jurassic
2. https://en.wikipedia.org/wiki/Singularity_(operating_system)
V8 basically does this internally with its bytecode, if your whole system was built on that bytecode then you can do software isolation rather than hardware.
> Ideally everything would just be in a single process.
Processes are an amazing boundary, probably the most powerful abstraction in existence.
> Why are new systems exposing the ability to dereference raw pointers to user programs?
This shouldn't be possible today - SMAP/SMEP are standard now.
> obsoleting the need for hardware isolation
I think if the last 3 years (sidechannel frenzy) has taught us anything, it's that software-isolation is extremely difficult. Even hardare isolation is difficult.
Any real example where this makes sense on an internet-connected device?
Rust programmers use unsafe escape hatches all the time BTW.