I use this a lot. My text editor (octopus) runs in it. Inferno is pretty interesting and very easy to code on, however the programming model takes getting used to.
I never did get the chance to use Octopus for any length of time, it always looked a bit over complicated. I guess it didn't help that the talks I saw on it were Spanish people taking in English. Not all of the subtlety came across.
But I think it was Francisco that came up with "It's not Universal, it's not Serial and it's not a Bus", I always liked that one.
There is, at some level, a Java VM that is functional with Inferno OS. No idea at what capacity it can be made to function, but I've been meaning to mess with it for awhile now. https://code.google.com/p/inferno-j2d/
This was revived for a GSOC project a few years ago but the google link here doesn't seem to have the resulting work. Anyone have more up to date details?
I believe that this is the up to date repository...it was GSOC for '13 and the last commit time seems to match. The repo states that the repository was cleaned and files removed to comply with Oracle/Sun, but there is an index that lists all required files from JDK7.
The beauty of Inferno is that one of the incarnations happens to be an operating system that runs on bare metal. But the very same code can be run as a command line program in Windows / OpenBSD / OSX / Linux. Or as a multi-windowed program like an MDI or a single window, or a full screen window in kiosk mode, or as a network service on IBM's Blue Gene.
Inferno is used by IBM, NASA, Alcatel-Lucent, the US DoD.
Bruce Ellis (one of the people who created Mark V Shaney) and one of the original Inferno developers until it was sold, has been working on a Verilog cpu to execute DIS natively but still no prototype.
One of the beauties of Inferno is it will run on a platform with no hardware MMU.
And the Styx protocol means it can do great things easily. It has even had servers running on Logo Mindstorm.
"There's a good comparison to be made with java, as they had similar design goals:
good performance (within an order of magnitude of C)
cross platform / virtual machine based (WriteOnceRunAnywhere, except actually delivered this time)
safe execution of untrusted code
powerful network / browser focus
However, they diverged in a few areas (probably to their advantage):
register based byte-code (as opposed to stack based), maps well to existing processors, JIT compilation works much better
supported as a native operating system (i.e., it'll easily run on bare hardware, for many values of hardware)"
The choice of register vs stack for bytecode doesn't make any difference for a modern JIT like HotSpot. The bytecode gets transformed into an intermediate representation (IR) and optimized before being translated to machine code. A register based bytecode like Dalvik that has 65,535 registers certainly does not map directly to hardware.
Edit: Michael Franz's research would seem to disagree, and I believe Mike Pall (of LuaJIT) would also disagree.
As I remember, the Dis bytecode used 64-bit instructions, with a 16 bit opcode, a 16-bit address and a 32-bit address. I've heard it described as a memory machine, and also as a machine with 65,536 registers.
In any case, it's easier and more efficient to perform register allocation from an intermediate language with a huge number of registers down to a small number of physical registers than it is to assign slot locations to registers. See Michael Franz's SafeTSA [1] project for an example of modifying a JVM to be able to mix and match both Java bytecode and an SSA-based bytecode in the same process. Granted SSA has some additional properties besides an infinite register set that make code generation nice. However, they found that it took less time to generate native code from SafeTSA and that the generated native code ran faster, even though the JIT backend was identical for the two bytecode formats. The disadvantage of SSA and memory machine bytecodes is they are more complicated to efficiently interpret if you're not generating native code from them.
Easier? There have only been about 8000 PhDs done on register allocation, it's very well understood and the differences are pretty small. If you are reinventing it one might be incrementally easier
In any case, Java's stack-based bytecode is really a register machine in disguise. It isn't a general stack machine -- for instance, at a given "PC" the shape of the expression stack (i.e. the number and "basic" types of elements in it) needs to be constant.
The right way to look at Java's bytecode stream is opcodes for a register machine with _implicit_ input and output registers. Mapping it to a compiler IR would not be easy in the general case if that weren't true.
That's a disingenuous - of course it makes a difference. Trying to infer an efficient allocation of registers from a chain of stack instructions involves a ton of tricks that bloat the compiler and make loading the bytecode slow and processor intensive. That's the problem Dalvik was designed to solve, and why Dalvik's successor ART is a regular compiler and not a JIT.
The entire concept was based off of Dante's Divine Comedy. Limbo (programming language), Styx (communications protocol), Dis (the virtual machine).. I'm pretty sure there were more.
Better still, provide a Styx service (p9 by another name) and then mount your service as a file system. If you do this then one can also mount it in plan9 or Linux
what could be the use case now for learning Limbo/Inferno?
it says "distributed" but i couldnt see what it offers for distributed as in multi rack or even multi dc distributed. distributed as in distributed automatically to threads?
Here's an example of distributing machine resources across different networks and devices [1] using inferno. An example of distributing computation is at [2].
Mechiel Lukkien has a bunch of interesting Limbo programs and libraries that work on Inferno [1]. Also of interest might be running Inferno on Android phones [2].
ah, nice to see that code linked! quite a few of those repo's aren't very interesting, some are:
- httpd (have been using it as my webserver for many years)
- qwm (window manager, inspired by acme and a bit of dwm, but a bit buggy)
- vixen (vi clone in limbo (i can't use acme for days on end))
- wmrun, together with qwm and vixen was an attempt at get more of an acme-like workflow
- ssh & novt, ssh client and terminal
i attempted to write enough software for me to use it daily. sadly i ran out of time & energy.
inferno is such an amazing system. very clean code. limbo is a joy to program in. it deserves more attention than it gets...