I came to this post because the video posted at the beginning of this thread is mine. I saw a big spike in video views the other day and it took me a bit of digging to find out where the extra traffic had come from.

It's an interesting discussion about whether Ultibo is an OS or not. It's one I've had with a friend of mine. My contention is that it is not an OS. Here's my reasoning:

Ultibo is made up of two things:
a. An IDE (based on the Lazarus IDE for Free Pascal) together with an integrated Pascal compiler (FPC).
b. A set of libraries which implement all of the features described in the wiki. These are all implemented as Pascal "units".

Neither of these things are an OS. Ultibo's libraries (units) have a lot of the capabilities that an Operating System has and so you could, if you wanted to, build an operating system with it. But the thing you are installing is not an OS. And any application built with it would be missing a key capability: the ability to load and execute multiple processes, as that is not currently possible.

Furthermore, none of the features are always present. You only get the things you compile in to your application. So if you don't include the filesystem unit, not only can the application not access files but the filesystem as a whole literally does not exist to the application. That is quite different to an OS.

Accessing hardware can only be done if you compile in the device driver for the hardware (and if there isn't one, you have to write it first). There are no services sitting underneath your application that are always present just in case you want to use them. Compare this to Linux, where as long as a device driver is loaded any application can use it and it is always present just in case.

Lastly Ultibo does not provide any services to load and execute multiple applications. There is some work in progress to allow dynamic libraries to be loaded which might open the door to that kind of thing but again it wouldn't make the thing you are building an OS unless you actually build an OS with it.

Why do they call it bare metal? The key differentiation here is that when you write an Ultibo application, you are creating a kernel which will be booted instead of the traditional Linux kernel. That kernel will be a single purpose application. It has direct access to all of the hardware, warts and all. In effect, all of the memory and memory mapped hardware ports are in user space, so if you want to write to a random memory location you can. There are no protections that an OS typically offers to wall off units of execution.

I can certainly see that some would still think it's an OS even after all of the above (my friend does). After looking at a wikipedia page on what the definition of an OS is, we found "library operating system" which kinda covers it if you ignore the cloud bit. But it is not an OS in the traditional sense, to me at least. It is not "another linux" which is how I saw someone on a Pi forum describe it. In the end, how people want to classify it doesn't matter, but if the developers called it an OS they would have failed get the point across about what it is. One could argue they failed anyway, given this discussion ;-)

What's it used for and do you really need bare metal access to a Pi given its power? One of the big advantages is boot time. An Ultibo application boots in less than 2 seconds. This instant on capability is extremely useful for many single purpose embedded devices. The filesystem is designed to allow it to be just switched off without needing to flush any write cache so it's safe in that respect (you must design apps accordingly of course). The other thing is Ultibo has full VC4 support as per my cluster stuff above, and so an HDMI screen with accelerated graphics is supported out of the box. That is way beyond the average microcontroller and that opens op a broad range of uses.

It's hard to use all of the power of the most powerful Pi's with a single purpose kernel, not least because there is nothing else running sucking up the resources other than your application. That just means you can do a lot of stuff on even the lower powered Pi's which makes devices cheaper to build. My cluster runs on a Pi3b+ and uses maybe 25% of one core and not much of the other three.

My cluster uses OpenVG rather than OpenGL ES, but both are supported by Ultibo. I only needed 2d graphics and OpenVG is kinda easier to get going with.

Sadly I think the use of Pascal holds Ultibo back a bit. It doesn't bother me as its a tool to get the job done, but many people see Pascal as a "dead" language and that puts them off. Ultibo is extremely powerful though and the developers have put a lot of effort into making it very stable and feature rich. Remember the Pi's hardware is almost completely undocumented due to the agreements with broadcom, so a very large proportion of Ultibo has been built as a reverse engineering exercise. That's super impressive to me. I built a wifi device driver for it, again via reverse engineering, and it took me a month to do it more or less full time.

If you want to see a hello world application, here's one:
https://github.com/ultibohub/Examples/blob/master/01-HelloWo...

That uses the framebuffer for the console, which enables basic text output.