Oberon, Plan 9 and Inferno (2021)
blog.tsr-podcast.com
blog.tsr-podcast.com
> Slim binaries were invented by Michael Franz in the early 1990s. They were motivated and opposed to the fat binaries invented by Apple during the transition from 68k to PowerPC architectures. OMI provided portable code based on a compressed version of the abstract syntax tree.
If you are interested in pursuing that topic, Vidar Hokstad wrote a nice blog post about it a couple of years back: https://hokstad.com/semantic-dictionary-encoding
So you can have modules fully native without any kind of intermediate representation, for IBM i you would need the cleverly named Metal C compiler for proper native code.
Actually there are plenty of systems that offer AOT/JIT workloads, Android, Java, .NET, Common Lisp, Visual Basic (classical)....
WebAssembly is also adopting both approaches.
I'm trying to navigate similar tradeoffs for a system I'm prototyping now, but motivated by code footprint and safety rather than portability.
https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.87...
Notice that on Oberon System 3 you could decide what kind of optimizations would take place, section 7 on the PhD refers to it as further work (System 3 came later).
Also a good production ready example of AOT + JIT to dive into as inspiration, are the latest version of Android. Since version 7 they rebooted the whole AOT concept, back to a mix of interpreter written in Assembly, JIT compiler with PGO, generating AOT code when the device is idle with help from PGO data, sharing PGO metadata with similar devices via Play Story.
I had the sense that Dalvik is a much more complex design, far too complex for a single hacker, additionally handicapped by backward compatibility with earlier Dalvik versions.
Admittedly I'm also using Plan 9 as a platform for my own OS project; I feel I can express my ideas easier using Plan 9's infrastructure compared to using Linux or one of the BSDs as a foundation, though this comes at the cost of extensive driver and software support (for example, there are no Common Lisp implementations for Plan 9 that I'm aware of, and porting an existing implementation such as SBCL will be a lot of work).
https://hn.algolia.com/?dateRange=all&page=0&prefix=false&qu...
Some of them actually were, however without the full package, they are a shadow of themselves.
There was no need for vi to be a virtualisation tool instead of a text editor.
Can anyone chime in on this topic?
Everything feels so simple and well-designed. Once you sort of wrap you head around the core concepts (namespaces, what 9p really gives you, etc) you suddenly start seeing how crummy posix based systems really are.
You can enable a shocking amount of functionality with little scripts.
At my last job, I worked on a mobile banking app (mostly c++/java) and I developed almost exclusively in acme on my raspberry pi with some little scripts to use my apple laptop for compiling.
Yeah, you'll miss out on some things (mostly web and gaming related) but if you're like me, your real pc will become your spare because you'll look for every excuse you can to do it in plan9 first and only use your expensive rig as a fall back.
It's also what sdf uses too, for what it's worth.
There's a very friendly discord, but most of the old guard is on irc. It's...less friendly there.
(This was posted using netsurf on 9front in a coffee shop)
The best to look at it, partially working, are browser emulations,
https://schierlm.github.io/OberonEmulator/
Between Plan 9 and Inferno, I suggest Inferno.
Descends from Plan 9, shows how the UNIX experience could be like when whole userspace is written in a memory safe language with dynamic loading and also you get to learn about Limbo influences Go's design.
MIT license really opened things up.
I also run aos/A2 Oberon systems. And I think it’d be awesome to port that to devdraw from plan9port for graphics on Unix systems. I just have not had the time.
That version of Oberon gets updates frequently also, and the Fox compiler system is really neat to play around with.
Async/await style concurrency was there before in .NET I think and Active Objects remind me of what Alan Kay really wanted from OOP (in a similar way that Erlang processes work)
Anyway it’s a language/OS nerd’s dream.
I mentioned it is hard to get, because keeping up with it requires having some background on AOS history, and even then newer ISO might only work on a VM, depending on which hardware one owns.
In anycase, here are some current links for others,