11 ms·
Oberon Operating System
- Athas 7y agoWhen people ask "how would you write an operating system without C?", Oberon is what I point them to. It's a very different style than Unix, in that the Oberon language is a relatively integrated part of the operating system, rather than communication being through a machine-level ABI. There were some spiritual predecessors where the compiler itself was part of the OS, and there was no other way to communicate with it than through the language semantics. I'm not completely sure whether Oberon works like that, but some Concurrent Pascal systems did. It's a very different view of what an "operating system" means. Anyway, Oberon is a memory-safe and garbage-collected language without the pointer trickery that makes C so dangerous. So how does Oberon implement the necessary low-level parts? Fortunately, some version of the source is easily browsable online: https://people.inf.ethz.ch/wirth/ProjectOberon/index.html https://people.inf.ethz.ch/wirth/ProjectOberon/index.html Here is for example Kernel.Mod: https://people.inf.ethz.ch/wirth/ProjectOberon/Sources/Kernel.Mod.txt https://people.inf.ethz.ch/wirth/ProjectOberon/Sources/Kerne... Low-level operations are done with magical functions that simply perform an operation on a memory address identified with an integer, e.g. `SYSTEM.PUT(q0+8, q1)`. These are then presumably handled directly by the compiler (the System.Mod file does not define any PUT function). This is syntactically more awkward than the equivalent in C (`q0[2] = q1`, assuming this is an `int` pointer), but perhaps things that are unchecked and potentially dangerous should be syntactically awkward. It's not like a lot of code will be written using these facilities.
- enriquto 7y ago> Low-level operations are done with magical functions that simple perform an operation on a memory address identified with an integer, just exactly like in C! What's the difference besides the particular syntax?
- coldtea 7y ago>just exactly like in C! What's the difference besides the particular syntax? On that part none. But Oberon is "memory-safe and garbage-collected", so you don't use that aspect for 99% of the program (whereas in C everything is like that).
- Athas 7y agoNone, but in C you use the same language mechanism for following an object reference (safe in the absence of manual memory management), indexing an array, and doing crazy address arithmetic. In Oberon, safe and unsafe operations are clearly distinguished.
- augustk 7y ago> In Oberon, safe and unsafe operations are clearly distinguished. Indeed! To use the unsafe (predefined) procedures you must import the pseudo-module SYSTEM.
- LessDmesg 7y agoOberon is not a serious OS, though. More like a teaching project. Oberon is to Linux what Scheme is to C++: clean, nice and good for pedagogic purposes, but not a serious product.
- pjmlp 7y agoOn top of that, the latest generations System 3 with its Gadgets and Active Oberon were quite good, and yes they even supported audio and video players, which made as much use of inline Assembly (Active Oberon extension) as any Windows 3.0/MS-DOS alternative back then. Enjoy a screenshot tour, https://www.progtools.org/article.php?name=oberon§ion=compilers&type=tutorial https://www.progtools.org/article.php?name=oberon§ion=co...
- fouc 7y ago>in that the Oberon language is a relatively integrated part of the operating system >There were some spiritual predecessors where the compiler itself was part of the OS Sounds very much like forth or lisp to me, (and perhaps even erlang etc). Any language that's implemented like a virtual machine internally is suited to being an "integrated" operating system. I think there's a tremendous amount of advantages to doing this as well, it reduces the levels of abstractions between the hardware and the user applications. Reduced level of abstractions means a snappier experience for the users, and also makes it easier for the developer to integrate things vertically. http://tunes.org http://tunes.org touches on this type of thing as well
- Athas 7y agoLisp machines, definitely. With respect to Forth, I'm not sure. Has there ever been a Forth operating system that provides the facilities we would expect of a modern operating system (and using Forth as the interface)? There are lots of Forth applications on bare hardware, and I see no reason why it should not be possible (except that you'd need some kind of extension for concurrency), I just don't know whether it has been done. I wonder if there is a lesson in the fact that all of the tightly language-integrated operating systems are dead. While Unix is clearly tied to C at an API level, the actual ABI is entirely based on machine code, and can be accessed through any language that can produce a binary. The downside may be that tight integration hinders language innovation, in that new languages have to target the "native language", which is awkward if it is high-level. Genera (the Symbolics Lisp OS) did host some C and FORTRAN compilers ("Zeta-C", you can get it online[0]), but I am not sure how fast it ran. Unix is often disparaged for providing "mechanism" instead of "policy", but maybe that has serious evolutionary advantages. [0]: http://www.bitsavers.org/bits/TI/Explorer/zeta-c/ http://www.bitsavers.org/bits/TI/Explorer/zeta-c/
- lispm 7y ago> Genera (the Symbolics Lisp OS) did host some C Symbolics had their own C compiler, which was unrelated to zeta-c. One could use it to for example compile the C-based X11 server.
- 7y ago
- rodgerd 7y ago> When people ask "how would you write an operating system without C?", Oberon is what I point them to. Well, you could also point them to VMS, which was deliberately designed to avoid language lock-in.
- tyingq 7y ago"SYSTEM.PUT(q0+8, q1)" I immediately thought of "POKE" on the built in BASIC interpreters for 80s home computers.
- dwheeler 7y agoIntel/Siemens had a joint venture developing the BiiN hardware. The operating system, applications, development tools, and so on were written exclusively in Ada. However, a lot of that software fully worked on that particular chip, so when it floundered commercially that was the end of it.
- saagarjha 7y ago> No questions are asked: this is a deliberate design decision, which needs getting used to. Most editors ask the user when closing a modified text: this is not the case in the Oberon System. I wonder how the system deals with user errors…
- mannschott 7y agoFor the case of accidentally closing a Viewer: The command System.Recall restores the most recently closed Viewer. Just find or type that command anywhere on the screen and then execute it by clicking it with the middle mouse button.
- robobro 7y agoI prefer Inferno but Oberon is interesting. The papers aren't a bad read either.
- pjmlp 7y agoI finds sad that many people focus too much on Plan9 and overlook Inferno, which was actually his last stop, where Plan 9 designers actually implemented some of the ideas they had originally for Plan9, like a memory safe GC userspace (e.g. Alef).
- zozbot234 7y agoIt would indeed be nice to see a comparison between Inferno and Oberon. From a distance, Alef and Limbo (the system languages used in Inferno) look like obvious predecessors to Go.
- pjmlp 7y agoA big difference is that Oberon OS is fully implemented Oberon, compiled to native code, with some variants doing JIT on module load. Whereas Inferno's kernel is implemented in Plan9's C variant, and Limbo uses the DisVM.
- lacampbell 7y agoI love the idea of smaller more logical operating systems. I am surprised that in the era of giant tech companies with top programmers and a lot of resources the most commercially viable strategy is still "try and paper over the complexities of linux" instead of starting something smaller and more modern.
- pushpop 7y agoThe problem of starting again becomes harder with each passing year because you have more hardware to support, more complicated software that needs porting and higher expectations from users about what a modern OS should behave like. It’s a similar problem with creating new web browser rendering engines.
- __d 7y agoA browser engine is, I think, the main impediment to most non-mainstream operating systems being "useful" in a day-to-day sense. It's just a massive amount of work, with literally millions of lines of code required, whereas a basic operating system is easily under 100k SLOC. Plan9 and Inferno suffer from this. Haiku suffers from this. And Oberon is has the same issue.
- mac01021 7y agoI think you're right, but I don't understand why creating a browser engine is such a monumental task. Is page layout really so complicated?
- SmellyGeekBoy 7y agoIt strikes me as completely insane that it's more complicated to write a browser rendering engine than a whole OS. But I suppose the proof is in the pudding and the fact that there are so many more hobby OSs than hobby browsers must be testament to this fact.
- 7y ago
- augustk 7y agoThe Oberon programming language is also a very nice alternative to C - smaller, safer and easier to learn. It can be used without the Oberon operating system.
- mratsim 7y agoI think Oberon doesn't have the community to thrive though. A language nowadays is much more than the core, it's also all the libraries, tooling and tutorials around it. That said, Oberon probably makes a very fine teaching language. Note that lots of Nim syntax and features were inspired by Wirth's languages including Oberon and Modula 3 (https://nim-lang.org/faq.html#what-have-been-the-major-influences-in-the-languages-design https://nim-lang.org/faq.html#what-have-been-the-major-influ...)
- __d 7y agoModula, and then Modula 2, were languages primarily written by Wirth. But Modula 3 was a project at DEC's SRC with Luca Cardelli as the primary author. Both Modula 2 and 3 are worth looking at, and both are fully capable systems programming languages (ie. you can write an OS using them).
- pjmlp 7y agoBoth C# and Java have had quite a few influences from Modula-3. With all the latest C# 7.x and 8.0 improvements, it feels really close to what Modula-3 allowed for.
- amyjess 7y agoPython as well. The module system and the exception-handling system were mostly lifted from Modula-3, and the class/object system is a hybrid of Modula-3 and C++ (something that's still explicitly stated in Python's documentation to this day [0]). If you first thought on reading that was "But Python's exception-handling system looks like everyone else's, how can it be lifted from this obscure language?", that's because everyone else lifted it from Modula-3 as well. That's right, C++ also borrowed Modula-3's system, and Java and C# built on top of that. Pretty much the whole mainstream concept of exception handling was invented by Modula-3. [0] https://docs.python.org/3/tutorial/classes.html https://docs.python.org/3/tutorial/classes.html
- gtirloni 7y agoUnrelated but related, I had a lot of fun programming in Modula-3 but it seems getting the toolchain working in 2019 is more of a DIY project? EDIT: I can't believe I said anything that warrants downvoting. Can't we share experiences?
- eterps 7y agoMentioning Modula-3 and how to get the toolchain working isn't even remotely related to the subject. Of course we can share experiences, but it would be probably at the bottom of this thread, because it's off topic.
- tralarpa 7y ago> isn't even remotely related to the subject That's quite a statement, knowing the history of those languages.
- eterps 7y agoI am happy to be proven wrong. What does Modula-3 have to do with the subject: Oberon (Operating System)
- tralarpa 7y agoThe languages Oberon and Oberon-2 were explicitly designed for the task of creating the operating system Oberon. When Wirth started working on the OS he realized that it would be too hard to write a nice OS with just Modula-2 (at least that's what I understood from the interviews he gave with various journals). Modula-3 was an evolution of Modula-2 by DEC (not by Wirth), but it was influenced by Oberon and they all belong to the same "Pascal language family" in terms of design philosophy. I think it's very natural to mention Modula-3 in the context of Oberon.
- eterps 7y agoI guess it's onfortunate that Oberon the OS and the Oberon the language share the same name. To me it read like someone posting about Xv6 (Operating System) and a comment mentioning Objective-C and how to get its toolchain working ;-)
- koonsolo 7y agoAt the university of Antwerp they gave Oberon as the first programming language for Computer Science (back in 1997). The reasoning of the professor was so that everyone started from scratch, because nobody would know it already. It was indeed an eye opener on how many different things there can still be. Especially the mouse key combinations that you had to press were pretty unique. Never used it ever since that first year, but it's hard to forget because it was so different.
- Koshkin 7y ago> eye opener I've never gotten around to being comfortable with mouse chording, which makes me think that it was a rather odd idea.
- Joeri 7y agoI was in that same class. I recall that same professor also used smurf analogies to explain programming concepts. A peculiar man. I have fond memories of learning oberon. It gave me a deeper understanding not just of programming but the almost arbitrary conventions of popular OS’s, in where to draw the line between code, documents and applications (in oberon they were all the same thing), and how to use keyboard and mouse to manipulate items on a screen.
- igitur 7y agoWas also taught in Computer Science 178 at Stellenbosch University in 1997.
- vermilingua 7y agoSomewhat off topic: this wikipedia page reads like a sales pitch. Does anyone know how to flag such pages for attention?
- bennofs 7y agoComment on the associated talk page, or edit it yourself to make it better? https://en.m.wikipedia.org/wiki/Wikipedia:NPOV_dispute https://en.m.wikipedia.org/wiki/Wikipedia:NPOV_dispute may be relevant as well.
- fortran77 7y agoOberon! The king of the faeries! https://en.wikipedia.org/wiki/Oberon https://en.wikipedia.org/wiki/Oberon
- tralarpa 7y agoIf I remember correctly, Wirth mentioned the moon Oberon and the fact that the name starts with an "O" (like "object oriented") as the source for the name of his programming language.
- MisterTea 7y agoAnother interesting Oberon project I found a while ago: XOberon, an RTOS for robotics http://www.ifr.mavt.ethz.ch/research/xoberon/ http://www.ifr.mavt.ethz.ch/research/xoberon/ No longer maintained or developed but an interesting piece of history nonetheless.
- nickpsecurity 7y agoFar as embedded, there's also Astrobe IDE for Oberon on ARM Cortex: https://astrobe.com/Oberon.htm https://astrobe.com/Oberon.htm
- jeffreygoesto 7y agoOh man, blast from the past! Sjur the spin doctor and Roberto the master mind... We had a collaboration where their robot was used as platform for a mid-size league robocup participant (wannabe :-})... That realtime Oberon on PowerPC was really cool!
- carapace 7y agoTo data, IMO, nothing has beaten OberonOS TUI+Gadgets for UI smoothness. (See Jef Raskin's "The Humane Interface") Also, the Project Oberon book is a magnificent tome detailing a complete, self-contained system that was used "in production" at the University. Highly entertaining and educational. Click here to run it in your browser on emulated hardware (no Gadgets though, too bad.): https://schierlm.github.io/OberonEmulator/emu.html?image=FullDiskImageWithSource&width=1024&height=576 https://schierlm.github.io/OberonEmulator/emu.html?image=Ful... https://schierlm.github.io/OberonEmulator/ https://schierlm.github.io/OberonEmulator/
- davidgould 7y agoOberon+Gadgets was a glimpse into a different better world. I'm glad I got to use it enough to realize that the UI's we have are not the UI's we could have had. The book Project Oberon is a masterpiece as are the language and system it describes.
- Rochus 7y agoOberon is very well suited for experiments; the language is so minimal that it is quite easy to write a compiler. Here is e.g. a front end for LuaJIT: https://github.com/rochus-keller/Oberon https://github.com/rochus-keller/Oberon (i.e. Oberon is used as an alternative to Lua with LuaJIT as a backend; here is more information about the project: https://medium.com/@rochus.keller/implementing-call-by-reference-and-call-by-name-in-lua-47b9d1003cc2 https://medium.com/@rochus.keller/implementing-call-by-refer...).
- lboasso 7y agoIf you want to try out the Oberon language, there are several Oberon implementations for different platforms, including embedded systems, native windows executables, and the Java virtual machine: http://oberon07.com/compilers.xhtml http://oberon07.com/compilers.xhtml
- pjmlp 7y agoI feel not having anything on a runnable state from System 3 or AOS doesn't do proper justice to Oberon. Those versions were already quite close to something like NeXT, but with Oberon variants. Nowadays what is left are random ISOs that don't always boot properly on VMs and it isn't easy to compile the those OSes, even with some source still floating around on Github. EDIT: Some System 3 and AOS links from here might still be useable, https://en.wikibooks.org/wiki/Oberon#System_Variants https://en.wikibooks.org/wiki/Oberon#System_Variants