Oberon OS Walkthrough (2009)
ignorethecode.net
ignorethecode.net
Interesting system, it's worth looking at since it has a few unexplored ideas.
(I was less impressed the the language).
I experienced it at about the same time as win3 / Win95 and X-Windows (before KDE/Gnome) and it compared favourably.
I'm glad this post is calling attention to it, but I don't think the post does it much justice.
The Zooming-UI and desktops happened later as a reaction to (today) more mainstream approaches.
I wouldn't call the interface a CLI - it wasn't REPL. It needed a 3 button mouse and was very point and click.
TUI is more accurate.
It was graphical, with no desktop and non-overlapping panels (although in certain cases one panel could obscure a lower panel). Think tiling window manager.
The mouse button use was chorded, so there were a lot of combinations, this meant one could highlight, select, copy, paste and execute commands without using the keyboard.
Any text could be selected and executed. Selecting 'Module.Function' would execute that function in that module.
It used a "Document Object Model", the base text class was expandable to handle more widgets than just native text.
Single user, single process with no real distinction between the system code and your own. You could view and edit system modules and add your own.
Some students later even formed a startup in Technopark that wrote code in Oberon the language IIRC.
I remember Pascal being a joy to use compared to C++ (how many months didn’t it take to be comfortable with reading c++ template exceptions?). I regard Wirth to be in the top three computer scientist of all time. Also one of the more humble ones.
I’d really recommend his papers if you have time!
[1] Johan A. De Villiers, J. Adriaan, Micro-Kernel Support for a Lightweight Extensible Workstation Operating System, University of Stellenbosch, 1999. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.40.1...
[2] Johan A. De Villiers, Validation of a Microkernel: a Case Study, University of Stellenbosch PhD thesis, 1999. https://core.ac.uk/download/pdf/37373005.pdf
[3] Jacques Elf and Frank van Riet, Porting Native Oberon to the Gneiss Microkernel - A Guideline for Future Ports, 2002. http://norayr.am/papers/port.ps
Like OK, cool, I get an email and I can middle-click it there to run it instead of.... I guess opening a text file and putting it there and hitting enter?
Not to mention that limiting yourself to text really limits how far this metaphor can go.
I do realize that there's limitations of the time, and that for the time it would be way better than, say, Win 3.1. Just like.... it feels like an evolutional dead-end (compared to say, Smalltalk-y OS's whose concepts have lived on in things like browser dev tools and SFDC' Apex environments).
I don't mean to yuck too much on anyone's yum, just feels like there are better ideas out there at this point.
Similarly you could imagine files/documents/etc be represented as elements of rich text.
This is _not_ an easy problem however! As an example, if I had a document referring to `~/.emacs`, it could be:
- the path on the system of the author's machine
- the path on the system of the reader's machine
- the content of the file on the author's machine
- the content of the file on the reader's machine
- A sort of lisp data structure based on the content of the file on (author or reader's machine)
Basically you enter in to the "reference or value" problem on many things. Text doesn't have this problem because it has no solution to the value problem, for the most part, apart from like embedding a base64 blob into your text.
But hey, if you're building an entire OS anyways, and you have some rich text primitives, you could imagine having that in the base libraries and setting up some COM-like primitives all over and work from there.
I mean this is basically Word, at this point. But a programmer-y version of Word would be interesting from my perspective.
Sounds like the opposite.
Another good example is TempleOS where you can render graphics into the cli and interact with them.
Lisp and Smalltalk did it first. :)
In Genera, any output to a repl window was not dead text; it was a live and mouse-sensitive reference to the actual object in memory. You could mouse on it to get a dynamically-generated menu of operations supported by the pointed-to value, or call functions on it, or whatever.
In Sk8 you could grab an arbitrary widget anywhere on the screen and drop it on a MessageBox window to obtain a named variable referring to it. You could then operate on it in a manner similar to that described above.
Maybe with the new revival project it can be relieved again.
I have their current software running locally. It's essentially a museum piece in its present state, but what I understand from Larry Masinter is that they've got the license unencumbered and intend to turn it back into a going project. I can't wait!
This is a really controversial pattern for GUIs. In one camp, the GUI is really a skin over the CLI that acts like a virtual user, translating GUI inputs into underlying CLI. In the other camp, the GUI is all there is (e.g., Windows) and there is no underlying OS that can be accessed via CLI: in fact, the CLI is a "fake GUI" (win32 apps written without a Window). I can't say which is better, but it is fascinating to see that this was an "original pattern".
My theory is that if applications are written as servers that do message-passing, one can have a shell language that orchestrates the passing of messages between servers instead of the flow of bytes between CLI programs; the semantics of the shell language still need to worked out, though. e.g. does it need session types, or can one get reasonable behavior by structuring data specially to indicate "this is only part of a response that's being streamed."
On the GUI side, the idea of describing a UI in pure data (like HTML) seems very reasonable, and seems like it would make it much easier to quickly throw together small GUI programs. So the drawing part of an application would just be a process that sends the screen/compositor process a message describing the state of its window as a tree, and receives messages for events in response.
A big advantage is it makes the semantics of composing GUIs a lot more reasonable "replace this leaf of my tree with this other process' tree" is a simple-to-implement and simple-to-understand operation, but seems like it'd make sharing widgets way easier: widgets are just processes that render without the "this is a window" flag set, and you ask the compositor to put them into your window's tree. Events flow back to the widget, and each side can send the other messages easily. An application could also "proxy" for a widget, including over a network link, so you get fairly simple network transparency this way too.
Performance is great, managed memory with no GC, multithreaded GUIs are possible etc.
Composita is a further development of A2. I think that it was a real missed chance that A2 wasn't chosen instead of Android as the ZUI and compiled modules would have been a great fit for mobile.
http://concurrency.ch/Content/publications/Blaeser_Component...
> So the drawing part of an application would just be a process that sends the screen/compositor process a message describing the state of its window as a tree, and receives messages for events in response.
I've been toying with an interpretation of this here - https://github.com/Imaginea/inai - and kind of having fun with it .. and even built a prototype internal app using it. Super early stage and so stuff won't necessarily make sense at the outset .. or possibly ever. Thoughts welcome though.
> A big advantage is it makes the semantics of composing GUIs a lot more reasonable "replace this leaf of my tree with this other process' tree" ...
The "dom" service in Inai pretty much feels like that. I felt like an idiot to try and (for lack of a better expression) REST-ify the DOM, but it seemed to work to my surprise.
> An application could also "proxy" for a widget, including over a network link, so you get fairly simple network transparency this way too.
.. yeah due to the "REST" nature, this becomes pretty straightforward.
The Amiga had an interesting scripting model with ARexx and the ARexx port.
An executable won't have its own window unless it calls CreateWindowEx one way or another, and any such window won't be very functional until the app starts pumping messages, which is work it needs to actively do, with GetMessage and DispatchMessage. Obviously a CLI-only app won't do these things, but it doesn't need to go out of its way to not do them; it doesn't need to fake anything, or hide or otherwise resort to subterfuge to conceal GUI elements.
There's a stronger argument to be made in some COM scenarios; e.g. single threaded apartment threading model creates a hidden window so it can use the message pump as a communication and serialization mechanism. But even here it's mostly just repurposing existing Windows stuff in ways which work well with existing GUI apps.
Oberon is a really nice and very well documented programming language and operating system to experiment with. Unfortunately not that much distributions are still available (most links seem to be dead).
If you're interested in the OS or the language, here is a platform independent, stand-alone version running on LuaJIT: https://github.com/rochus-keller/OberonSystem
There is also an integrated IDE with syntax coloring, semantic navigation, and a source level debugger.
The compiler supports small-case keywords and underscores in identifiers. I'm currently working on an extended version of the language.
Edit: I found a full repost of the original blog post on some random Tumblr: https://gtokio.tumblr.com/post/94669236/stevenf-warning-a-lo...
Archived: https://archive.is/CfRzW
https://en.wikipedia.org/wiki/Fsn_(file_manager)
As I recall it didn’t look particularly smooth in the movie itself.
I could imagine this kind of system might necessitate invention of actual good way of auto-rearrange-all-windows strategies?
I don't see windows themselves as a bad thing -- it's having to arrange them that I don't like and wish the os could define conventions for window placement to allow the system to "do what i want" more often without me having to fight it by moving a window around...
VR might be a new chance for Oberon to win out as a new paradigm. For a 3D based file/document manager, with 3D space instead of infinite zooming.
Not sure how that would work but it's clear that the current way of actually working in VR is not efficient. Usually some curved virtual screens are presented and you're left to feel around for your actual keyboard & mouse for input. Talking about stuff like Virtual Desktop and https://immersedvr.com . For example, why do you still have virtual 'monitors' in VR, why not have the windows free floating? It's only a retro constraint that makes no sense anymore.
It's like a vegetarian eating veggie burgers at McDonalds. Yeah it works, but it's mainly for 'conversion'/familiarity purposes and doesn't get the most out of the new paradigm.
Also I'm sure that for me this will end up a huuuge mess where I can no longer find anything. I'm the kind of person who fills up their desktop with icons until there's no space left. Doing this with actual open documents... The prospect is scary :)
Well, Oberon OS is much older than 2007 tho... More like 1987.
The ZUI was part of Thomas M. Frey's work for his dissertation "Bluebottle : A Thread-safe Multimedia and GUI Framework for Active Oberon" [2] (Bluebottle OS) submitted in 2005.
This was built on top of Pieter J. Muller's work for his dissertation "The Active Object System" [1] (AOS) submitted in 2002.
There are many more ETH (PhD and student) projects based on Oberon before and after (ARM Oberon, WinOberon, UnixOberon, Oberon.NET, ...) mainly in Jürg Gutknecht's group.
[1] https://www.research-collection.ethz.ch/handle/20.500.11850/... [2] https://www.research-collection.ethz.ch/handle/20.500.11850/...
https://progtools.org/article.php?name=oberon§ion=compil...
In a couple of years, all Oberon related knowledge will be left collecting dust in university libraries and digital archives.
I personally am intermittently working on the Wikipedia articles for Oberon (language and OS) and Bluebottle OS.
Contributions, links etc. very welcome.
I can gladly contribute the screenshots I took while using A2.
Here's one variant [1]. That said, it's a design space that is poorly explored with plenty of room for different variants.
[1] https://www.theverge.com/2012/5/24/3040959/dataland-mits-70s...
Talking to self -
Sadly, I thought it is not convincing to others so I went for panel based UI. https://github.com/imvetri/ui-editor.
This article helped to realise that there are other computer interface ideas which is better and less popular.
Idea that is stuck in my mind for a long time , and evolving, is to have A blender like 3d environment which has zoomable and rotatable 3d interface that has hardware interrupts as signals and resources as spaces. When zoomed from distance it looks like a light source, on zoom closer it starts to appear as a computer hardware parts showing date and instruction flow. (Do not worry about frame rate yet)
You can try Oberon in your browser, e.g.: https://schierlm.github.io/OberonEmulator/emu.html?image=Min...
It would be interesting to spatially arrange files and folders in codebases. If the framrate is high, I imagine it could be pretty powerful. Remembering where a feature is on a plane seems easier than finding it in a directory tree.
You get an infinite 2d plane and you can put any number of windows (artboards in sketch) and then on the left you can click them to find them when you’re zoomed out or in.
This is actually a much better experience than the modern desktop having to alt tab or expose or something
Figma works okay because you're usually arranged in user flows so if nothing else, you can see the flow structure.
For reports, school assignments, code, receipts... things without any higher level structure, it's searching for a needle in a haystack. You'd be better off with a list sorted by date.
If yes, does it reinvent or borrow the concepts?
(I saw ACME in the yesterdays post: https://news.ycombinator.com/item?id=25777580)
[0] https://en.wikipedia.org/wiki/Acme_(text_editor) [1] https://en.wikipedia.org/wiki/Mesa_(programming_language) [2] https://www.youtube.com/watch?v=z_dt7NG38V4
One alternative is https://en.m.wikipedia.org/wiki/BlackBox_Component_Builder
I don't remember (eplored it long ago, around 2003) if it has the infinite zoom, but the text-intense UI is there.
My Swiss colleagues had convinced themselves that Java had no future and ETHZ-alumni could do no wrong, ever.
I believe the project failed and people lost their jobs because of this decision.
I don't know enough about OS layer to say but it seems like he knew his stuff.
HN discussion of the article: https://news.ycombinator.com/item?id=9681501