Ultibo – Environment for embedded development on Raspberry Pi
ultibo.org
ultibo.org
> Ultibo core is a full featured environment for embedded or bare metal (without an operating system) development on Raspberry Pi (all models). It is not an operating system itself but provides many of the same services as an OS such as memory management, threading, networking and file systems.
The more I read about it, the more interesting it seems.
This project is freaking interesting. I would welcome some support for smaller Nano/Orange PI boards and others with Allwinner/AMlogic/Rockchip/Sitara etc. MCUs. All chips already employed in TVs, media players, cellphones, industrial boards etc. as opposed to the Broadcom MCUs which are used only in the Raspberry PI, so there's already a huge load of iron this environment could become useful to write software for.
About 80% of ways of doing memory corruption in C are just not possible, unless one explicitly turns off safety constructs.
The developer culture was also that workable software and quality comes before performance tricks.
Many OSes were written in Pascal variants, Modula-2, Modula-2+, Modula-3, Oberon, Oberon-2, Active Oberon, Component Pascal, Concurrent Pascal.
There are still very few programming languages that can match Delphi RAD capabilities, while producing a fat free executable.
We were quite productive in them before UNIX took over the industry and brought C with it. The JavaScript and PHP of systems programming languages.
Nim is a good counterexample to Wirth's philosophy showing program readability, dev speed, and runtime performance can all go up if we increase language/compiler complexity where it makes sense. So, the reason Nim is a great project is that it's not a Wirth language. Look at Component Pascal if you want to see one like he'd want for industrial use. It was even commercialized with Blackbox at one point.
Why didn't anyone write a Wirth-language -> C translator, and wasn't it successful?
Eiffel works just like that, JIT/VM for development, compilation via C for deployment.
P2C was a famous one https://www.gsp.com/cgi-bin/man.cgi?section=1&topic=p2c
http://www.zi.biologie.uni-muenchen.de/~enger/SC22WG13/im2c-...
https://github.com/jtempl/ofront
But beyond Eiffel, most developers ended up moving mostly to C++ (like myself back then) as it provided the C compatibility, with most of the Pascal's safety if one cared to use the C++ features.
Then Java took over the show for security minded developers during a couple of years, until we finally arrived at Go, D, Swift, Rust, .NET Native, SubstrateVM.
IMO they weren't successful because you actually need good 'marketing' to make a strict and safe language popular. For most people it will feel like having to fight the compiler to accept your code. The Rust community does a really good job informing developers that it is definitely worth the trouble.
I can't think of anything "modern" that comes close to that, most languages these days are quite feature sink-y. And yes, that includes Go, if we consider Oberon to be somewhat of a baseline.
Heck, even his successor's language (Eiffel) is more minimal than what's hip these days.
> Pascal generally has one way to do a thing, the right way.
Right up through Object Pascal I always felt that was the case and in 2018 it's only now that VS2017 feels nearly as productive as Delphi 6 did nearly 20 years ago.
1e6+ lines of code can still easily be a project you can be productive in.
Aside from Free Pascal w/ Lazarus, the closest thing to that experience today is Go language with Oberon-like style, safer-by-default, and fast compiles. One of its inventors stated a design goal was realizing the fast-paced, smooth experience he had with Oberon-2 in the past.
It’s true that C’s flexibility comes at the expense of safety - but during the “Cambrian explosion” of personal computers, Wirth took too long to address limiting factors.
E.g. open arrays iirc were added in Delphi; the functionality makes life significantly easier. As a result, pascal people had to break the language shackles (and safety guarantees) and doing that created a just-as-unsafe-but-more-cumbersome situation compared to C.
Wirth languages sucked at variable length dynamic memory.
ISO Extended Pascal already supported open arrays, just like Modula-2 already did in 1978.
Turbo Pascal 7 for MS-DOS got open arrays in 1992!
https://archive.org/stream/bitsavers_borlandturVersion7.0Lan...
Object Pascal was always a lot more free with setting the bounds of an array too - you could specify any arbitrary range or even an enumeration. That's one thing I miss in C like languages. Being able to define an enumeration, then set the array bounds to that type - and then access it via the enumeration's values.
On a side note, I also miss sets. They were a first party part of the language, not a set of bolted on classes in the runtime library. I remember that I would quite often defined an enumeration, and array that used that enumeration as the subscript and a set to allow parts of the enum to be turned on and off when accessing the elements of the array. That was pretty cool. It made certain things a lot simpler - like defining errors that were raised by an action and then getting their textual error messages - all without having to do any conversion or anything fancy.
You can achieve some parity in C++ and other languages with similar type systems, but it does require some tricks and I am not sure if everyone would appreciate it.
Outside expensive UNIX workstations C was just yet another systems language.
In those days 16 bit software was still mostly written in Assembly for those that cared about performance, including games and OSes.
On my region of the globe using C on MS-DOS was to bring work home.
At my technical school we were sharing a Xenix workstation between all class, meaning taking turns to seat at it.
On OS/2, Windows, Mac OS and later BeOS, C++ was already winning ground as the main language for application development, even though the kernels were being written in C.
It was the rise of free UNIX clones that helped C turn the tables into its direction.
Windows was starting to get adopted, Unix was not yet a thing in the homes (but enthusiasts DID start Linuxing by 1994-1995), Assembly was getting irrelevant except for demos, games, and the occasional tight loop, 16-bit was seriously dying -- everything new was 32-bit with dos extenders, Watcom was the best compiler ever, and DJGPP was common -- C and the shiny-new-but-not-yet-convoluted-C++ were kings.
And there was essentially no viable Pascal for PCs other than Turbo Pascal -> Borland Pascal -> Delphi, so it doesn't really matter what the standard said.
(In addition to the Oberon language, which is great (in context), and the internal organization of the Project Oberon OS in an education in itself. (Prof Wirth has kindly made the book into PDFs for distribution, available here: http://www.projectoberon.com/ This book is soooo good for computer system design).)
https://www.amazon.com/gp/search?index=books&linkCode=qs&key...
Unfortunately the book describing how it worked for current generations is priced as collector item and very hard to get by.
There are however some working web sites still and the Citeseerx paper version that is related to the book edition.
http://www.ethoberon.ethz.ch/ethoberon/tutorial/
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.472...
https://m.youtube.com/watch?v=t6NMJh0noDk&index=35&list=WL&t...
Thanks for point it out anyway.
I just have to figure out what to do with it and my Rasp that’s currently collecting dust :/
E.g. extend an Atari TT/Falcon emulator to use as much as possible of the RasPi's resources -- all the RAM, an emulated blitter & FPU, the SD card as a big hard disk. There are several FOSS OSes for the ST now; this would make an interesting selection of old ST OSes accessible to a new audience on the cheap.
The only FOSS Amiga OS I know of is AROS and they're already working on a native port, but a bare-metal Amiga emulator would be fun to have, too. Classic MacOS would also be great. :-D
AFrOS; SMSQ/E; CP/M-68K.
EDIT: Or a link to the repository, in case it's not hosted on GitHub.
Ultibo seems pretty nice, although I only read a bit out it and didn't play around with it. I'm a big fan of small systems and fondly remember writing Pascal back in the Borland Pascal days.