Hacker News new | past | comments | ask | show | jobs | submit login
Free Oberon: Cross-platform Oberon IDE (oberon.org)
182 points by AlexeyBrin 10 months ago | hide | past | favorite | 66 comments



This project is cool as hell. I really appreciate that it has very straightforward instructions and takes no time to get up and running, it's just a git clone and an install command.

The only quirk I ran into is that when I ran graphical programs, I would get a full-screen window with a blank prompt; I needed to move that window to another workspace in order for the running program to be displayed. The IDE seems to get smushed into the bottom corner of the screen in KDE and gnome for some reason (which I could work around by toggling windowed mode with alt+enter and then dragging the window to resize), but it works fine in i3.

Between discovering this and finally getting around to trying the Factor language, I'm afraid I'm going to be very unproductive on my side projects for a while..


>I'm afraid I'm going to be very unproductive on my side projects for a while

I infer that your main project is discovering things that may one day help you be more productive in your side projects.

It could be worse. Ben Eater was just trying to get his web browser working like he wanted...


Thank you very much. I love Oberon for its simplicity and structuredness, and I find it best-suited for all programming tasks. I even use it in web-programming. So when I found out about Oberon, I noticed that there is nothing that I can easily install to start programming in it. I tried XDS, OO2C, VOC, BlackBox, and everything was not that I wanted. It was nothing as simple as, for example, Free Pascal, where you just download and use it. So I made Free Oberon. I switched several times from SDL 2 to Allegro 5 and 4 and back (with a lot of recoding on each step), also switched compilers from VOC to BlackBox and finally Ofront+.

I'm planning to substitute it with my own Oberon compiler at some point, so I read everything about compiler construction and do Oberon experiments a lot.

Could you please describe the issue with the full-screen a bit more? You can create an "issue" in the FreeOberon Github repo. I think it would be possible to fix it. Are you using two monitors?


I learned about Oberon by experimenting with the Acme editor (which borrows heavily from Oberon) and from learning about its influences on the Go language. The language doesn't "look modern", but it does seem very simple, and it seems really fun to learn. And I very much enjoy the retro feel of it.

A bonus for me personally is that I happen to be learning Russian, and there's a fair bit of documentation and videos that I can use for immersion learning, which is a lot of fun.

I will be sure to help with the full-screen issue soon.


Every time Oberon comes up, I wonder how it would have done if it had had a "normal" graphical interface, and some aesthetically minded person such as Keith Ohlfs or Susan Kare to make it attractive by the standards of the average user/developer.


Isn't this normal enough?

https://www.progtools.org/article.php?name=oberon&section=co...

Good enough when placed against many UNIX windows managers, or the developer beloved Plan 9 and Inferno GUIs.

It failed because like Xerox, it stayed mostly inside ETHZ walls, a few European universities and zero industry interest, too much focused on building UNIX clones.


I remember Oberon. My take is that it failed to become a mainstream language because we were using C to write system tools and browsers, Visual Basic and Visual C++ to write Windows apps and PHP and Java to write web apps. Those filled most niches.

Delphi and the Pascal languages were on a downward spiral of popularity. C was the incumbent. PHP was easy to install and solved a problem that most developers had: write a web app quickly. Java and the Visual languages were backed by big companies. Oberon was not. It was a curiosity at best. I remember other languages from back then: Eiffel and Modula 3. They resurface sometimes in HN posts.


> Isn't this normal enough?

It definitely is not normal enough. It's a whole operating system, after all.

> It failed because like Xerox, it stayed mostly inside ETHZ walls, a few European universities and zero industry interest, too much focused on building UNIX clones.

Not really. It failed because Oberon was not a great language even in the 2000-s. Right now it's not even good enough for teaching purposes.


Apparently it was good enough to inspire Go authors, and everyone that enjoys its influences in Go, as the ultimate design in language simplicity.


As an inspiration for some of the ideas? Maybe. As a language in itself, Oberon was crappy even at that time.

From the very start, Go was utterly practical, designed to be used for actual programming, and not PhD theses.

So compared to Oberon, Go had hash maps from the start. It didn't have the SCREAMING PROCEDURE/RECORD/VAR case-sensitive keywords, Go had multiple return values for error handling from the start, better namespacing support, variable declaration in-place, full support for UTF-8 for strings, etc.

And of course, Go has lightweight threads and channels, making it a great language for servers.


If you are stuck with a tunnel vision of the 1992's version of Oberon, yeah.

Except that Active Oberon from 1996, sorted out most of those cases.

Hash maps don't need to be built-ins, as proven in many languages.

Active Objects take care of lightweight threads and channels.

Oberon, the OS, was also good enough for Go's hero Rob Pike to implement ACME and RIO on the same UX principles, re-use Oberon-2 (yet another version you ignored) method syntax, and Oberon's SYSTEM package as unsafe.

Screaming keywords, only an issue when someone doesn't use an editor with automatic capitalization, only an issue for Notepad-like users.


We're talking about Oberon here, not about its clones. And I based my reply on Oberon-2. It definitely sucked.

> Hash maps don't need to be built-ins, as proven in many languages.

Except Oberon doesn't have generics.

From the very beginning, Go included very practical "magic" generic functions: append, len, cap, delete. Along with slices, they allowed Go to flourish without generics.

Oberon only has LENGTH.

> re-use Oberon-2 (yet another version you ignored) method syntax

Here's Go: "func (c Type) DoSomething(hello, world string) (int, error)". Here's Oberon: "PROCEDURE (c: Type) DoSomething(hello, world: STRING): INTEGER;" (error handling is for wimps).

It is similar, but not the same. Go also has structural polymorphism, which Oberon lacks.

> Screaming keywords, only an issue when someone doesn't use an editor with automatic capitalization, only an issue for Notepad-like users.

IT LOOKS UGLY, AND IT MATTERS A LOT, WHEN YOU MOSTLY READ THE CODE.

So yep, I maintain that Oberon is a shitty language. It might be useful as a starting point for new language design, but that's it.

It has never been practical, and on its own it only ever "succeeded" in the ETH where professors just forced students to use it.


So stuck in 1987, got it.

What allowed Go to florish was being sponsored by Google, and being pushed alongside Docker and Kubernetes, without them, it would have had the same fate as Plan 9, Inferno and Limbo.

All really widely successfull commercial projects from UNIX folks. /s

Turns out shitty languages only flourish with the right sponsors.


> So stuck in 1987, got it.

Oberon-2 was in 91.

> What allowed Go to florish was being sponsored by Google

No. What allowed Go to flourish was a purely practical approach to the language, instead of theoretical nonsense.

For example, Oberon does not have ANY error handling.

> and being pushed alongside Docker and Kubernetes, without them, it would have had the same fate as Plan 9, Inferno and Limbo.

Facepalm. Docker was developed completely separately from Google.


1991 is hardly any better than 1987.

Error handling in Oberon is as good as in Go, if error boilerplate all over the place.

Docker was originally developed in Python, and pivoted to Go because of Google.

Likewise Kubernetes started in Java, and pivoted to Go when some Go folks joined the team.

Had it not been for it, Go would have been as sucessful as Inferno/Limbo, which are highly inspired by Oberon, including its market failure.


> Except Oberon doesn't have generics.

...which could plausibly be fairly easily fixed by Zig's comptime feature, which would seem to fit the language very well.


Could you please give a link to the Zig's comptime feature for generics?


"Screaming" keywords -- is not an issue even for those who use Notepad. Just hold SHIFT with your pinky lol :)


Oberon does not have LENGTH


Oberon also has multiple RETURN statements. Only the latest Oberon-07 version does not. So before 2007 Oberon always had multiple RETURNs.

And these keywords can be said to be "screaming" only by a person who does not understand what a "habbit" is. People get used to "screaming" keywords very quickly. And turns out, the uppercase keywords are more practical. Typing them does not take more time than typing curly braces all the time in other languges (you also need to press SHIFT for that, you know). The big keywords allow visual separation of syntax sections, that Go lacks so much. I.e. in Go, when you see a for-loop, it may not actually be a for-loop, but a while or a foreach loop -- to find out, you need to count the semicolons in the line.


Oberon is perfect for teaching purposes. It is understandable from the first glance. On the first lesson, even 9-year-olds start writing graphical programs! I've been testing Free Oberon as an edutcational tool since 2016. Kids in a sport summer camp use it.


> It's a whole operating system, after all.

You can use that one which easily starts on all platforms without taking control of the PC: https://github.com/rochus-keller/oberonsystem3


Maybe, but that's not what's being shown on the linked website.


Maybe because the linked Website is not the original Oberon, and derived OSes done at ETHZ.

The question of the parent naturally should be answered in regards to what was available during the 1990's.


Working from uncertain organic memory, but yes, the other screens look much better.

I've actually always been quite fond of the concept of Oberon --- wondering if this implementation might work well for a potential future pet/side project: making a graphical front-end for METAPOST/METAFONT.


Why not? Use Free Oberon, I will help.


Check out Component Pascal Collection. It is as normal as it gets under Windows. Tell you what: I use their built-in wordprocessor to write grant applications. I prefer it over MS Word or even Libre Office. Download free BlackBox Component Builder from there, as well as amazing scientific software written in that language. Includes graphics, math, algebra, simulations, etc. Some of that stuff (Chill by Robert Campbell) was developed at BAE Systems for flying jet planes. Not just cool. It is heavy duty production stuff. And free. http://www.zinnamturm.eu/downloads.htm


BlackBox is a great program, but it is a self-contained system, that isn't well-suited for classical programming (i.e. making executables: console applications, grpahical games, integrating with C-code).

If you need an Oberon compiler in classical sence, use Free Oberon.


The graphical interface is the least of its problems.


How does FreeOberon compare to FreePascal, in terms of standard library and third party libraries available? Is it a practical development environment, in the sense of not needing to reinvent every wheel to use it?


https://free.oberon.org/docs/en/

On a glance it looks pretty limited, I see no way to access OS API, no networking, etc (more or less like Turbo Pascal).

Perhaps sufficient as educational tool.


Syscalls were the OS APIs back in the Turbo Pascal days. DOS didn’t have an SDK like we now expect. But people still pulled off some pretty sophisticated stuff in Pascal (personally, I wrote a DOS GUI frontend (like pre-Win 3.x) in Turbo Pascal)


Damn, I miss the days Turbo Pascal was used for business logic, and the grunt work was TASM blocks and syscalls.

Actually, that might just be the nostalgia talking.


int 0x80 was/is the x86_32 way of doing syscalls in linux.

im not sure if sysenter, used on 64bit systems is classed as an interrupt.

the sdk is just a layer on top of that.

ive never used c on dos, it woukdnt surprise me if they used a similar library to linux. theres certainly nothing preventing it.


MS-DOS used Int 21h with the function number in in the AH register.


Ah, I still remember those DOS interrupts :)

And of course, modern Pascal compiler like FPC provides OS specific units to do that.


Free Oberon is used as educational tool (since 2016).

I also use it in production code for web-development. It serves as a backend for a high-load interactive website (langauge courses with exercises).


> Perhaps sufficient as educational tool.

Has Oberon ever been a thing outside academia? I’ve heard about some Modula2/3 stuff out there in the wild, but not Oberon.


I think it's due to a lack of freestanding compilers when the project was launched. People expected a new programming language from Niklaus Wirth but what they got was a language and an operating system, the latter which was too different from any mainstream system.

Studying and using this relatively low-level (but safe!) minimalist language which is not inspired by C has given me quite a few new insights.

https://miasap.se/obnc/oberon-report.html

https://miasap.se/obnc


Yes, when I was at CERN almost 20 years ago, Niklaus Wirth did a session on Oberon for scientific computing, and as part of that Oberon day, there was someone from Brasil talking about their use in production, controlling some hardware stuff.

Additionally Astrobe sells Oberon-07 compilers for IoT (https://www.astrobe.com/order.htm), for a while XDS also sold Oberon compilers alongside their Modula-2 compilers, and there was a spin-off from ETHZ which sold Component Pascal, basically yet another Oberon dialect.


Check out Component Pascal Collection. Download free BlackBox Component Builder from there, as well as amazing scientific software written in that language. Includes graphics, math, algebra, simulations, etc. Some of that stuff (Chill by Robert Campbell) was developed at BAE Systems for flying jet planes. Not just cool. It is heavy duty production stuff. And free. http://www.zinnamturm.eu/downloads.htm


Oberon is used in microcontroller programming, medical device programming, railways in Switzerland use Oberon, atomic power station in Rostov (Russia) use it, a power station in Kaliningrad also uses Oberon.


From a quick Google search: "Oberon includes low-level features that make it particularly suited to the development of real-time applications on ARM microcontrollers." https://www.astrobe.com/Oberon.htm

https://www.astrobe.com/order.htm

Ah, very interesting.


You can access the WinAPI, network etc. etc. (also you have the platform abstraction level) using modules that are not documented, but are available in source in the Free Oberon directory. See Data/bin/OfrontPlus/Mod/Lib. Please let me know what module you need and I can add it into the documentation.


It is better to not use any software from russia now anyway.



Quick look at https://github.com/kekcleader/FreeOberon/blob/main/src/make....:

It uses ofront (Oberon-2 to C translator), and let GCC do the heavylifting. Let's check if this thing can be easily built on macOS...


It uses Ofront+ -- a descendant of Ofront. So that's another transpiler.

Ofront+ is much more developed, for example it allows compiling in Oberon-07 standard with the addition POINTER TO ARRAY and 2-byte CHARs. That is what Free Oberon uses by default. In future versions of Free Oberon, there will be a selection of Oberon standards (Ofront+ provides Oberon 1990, Oberon-2, Oberon-07, Component Pascal, and the so called Oberon-3).


Please let me also know about the results. I don't have access to MacOS, but would love to make Free Oberon available there too.

My students with MacOS are learning using Free Oberon in an emulator.


The great thing about Oberon now under Linux/Windows/Mac is that you can easily create CLI and related filter programs, like something that can be piped into perl or awk, or can receive output from a shell pipeline. This makes for a very gentle slope into using it more.


Which Oberon compiler do you use?


I can recommend OBNC:

https://miasap.se/obnc/

With this compiler you can also write interfaces to existing C libraries without too much pain. This is achieved without any (non-standard) additions to the language.


I recommend BlackBox Component Builder and the Component Pascal which should have been named Oberon-3, but stepped back to Pascal for marketing. Which failed. But the language and environment are superior. And free. Check them out. This website is providing amazing scientific software. Includes graphics, math, algebra, simulations, etc. Some of that stuff (Chill by Robert Campbell) was developed at BAE Systems for flying jet planes. It should tell you something. http://www.zinnamturm.eu/downloads.htm


I think the quote below applies to both Oberon and Component Pascal.

"Programming languages are like cats. It is easier to get a new cat than to get an old cat fixed. Most successful languages are ultimately replaced by upstarts. Remodeled languages rarely match the glory of the original. Fortran was once the king of languages. It has been revised several times over the years, but the modernized dialects experienced a fraction of the prestige of Fortran IV. Similarly, Pascal was a popular structured programming language, but none of the object oriented dialects ever approached Pascal's glory. Instead, languages tend to be superseded."

https://crockford.com/javascript/popular.html


The latest revision of Oberon has several implementations. Also, OBNC can be used on Windows, macOS, Linux and other POSIX compliant operating systems. Component Pascal has a single implementation which is Windows only. Oberon was created by a master of programming language design; the feature set is minimal but complete. Component Pascal adds a number of features which Niklaus Wirth intentionally left out in Oberon.


Blackbox is already for Linux. Also there is a Linux 64-bit version of a limited console compiler.


In Free Oberon, you can also make C-bindings very easily. In fact, there is Allegro5.Mod in the source files as a good example.


Hi everyone. I'm the Free Oberon creator :) Will be happy to answer your questions.


The TUI IDE is kinda interesting, looks a lot like QuickBasic, Turbo C and other old-style DOS apps. But otherwise, it would be a lot more sensible these days to just code an Oberon-specific language server, that you could use with any IDE.


Oberon is much more a language/library/IDE/operating system, like a Pascal-flavored Lisp machine. This is a bit like saying "Emacs Lisp is great but what I really want is a language server for it so I can write it in VS Code."


This project just uses a C transpiler and creates plain binaries, though. It's not running under any sort of bespoke environment.


Yes, I intentionally wanted to make it create real binaries. I had a version running on BlackBox, which produced machine code too, but only 32-bit code, and there were limitations on using code from other programming languages (BlackBox only allows so- or dll-files to be plugged in). I made it so people can create stand-alone executable files, like, in example, Telegram.


Free Oberon includes a console compiler (fob), which you can use in any IDE. Oberon is a langauge with all-caps keywords, so it does not really require syntax highlighting. So the language server might not be so useful for this language (I don't use IDE tips etc., so maybe there could be some benefits there, I don't know).

The Free Oberon IDE resembles Turbo Pascal-style IDE, but this currently runs in a graphical window and can be easily customized.


I love that TUI. Ncurses doesn’t even come close.

I used to spend hours in Paradox for DOS, Turbo C etc. It felt so comfortable compared to Ncurses TUIs.


The TUI for Free Oberon is built from scratch. The programming module is called "OberonVision" (like TurboVision in DOS).


Too much at 4:20 AM




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: