# Operating systems written in Ada

**URL:** <https://forum.ada-lang.io/t/operating-systems-written-in-ada/4834>\
**Category:** General\
**Created:** [October 19, 2026, 6:08pm UTC](https://forum.ada-lang.io/t/operating-systems-written-in-ada/4834 "2026-10-19T18:08:31Z")\
**Posts on this page:** 18\
**Page:** 2

<div class="post-metadata">

**Author:** ![HawkerFrake](https://forum.ada-lang.io/letter_avatar_proxy/v4/letter/h/3e96dc/32.png) [@HawkerFrake](https://forum.ada-lang.io/u/HawkerFrake)\
**Post date:** [November 7, 2026, 8:42pm UTC](https://forum.ada-lang.io/t/operating-systems-written-in-ada/4834/21 "2026-11-07T20:42:43Z")

</div>

Late reply, been very busy.

I looked at some of the Operating systems out there and one thing I did not see, or perhaps I wasn’t looking hard enough, none of them talk about distributed computing in terms of transparent resource sharing between machines.

The Unix-like and POSIX clones are disappointing in the sense that they aren’t doing anything new or interesting. I gravitated to Plan 9 for a number of reasons. It’s very simple, human-scale design (e.g. one person can manage their own fork of the OS quite easily), per-process name spaces, 9P, Plan 9 C dialect and first-class cross platform out of the box. The idea is _ALL_ resources are served using a universal protocol, 9P, turning the system into a collection of servers that are network transparent. 9P is simple enough to run on microcontrollers so one could serve resources from an mcu in an embedded thing to a PC using serial or whatever two-way byte pipe - see [Styx-on-a-Brick](https://doc.cat-v.org/inferno/4th_edition/styx-on-a-brick/). Things like IoT are as simple as mounting the 9P server from e.g. your air conditioner and `echo 'mode=cool temp=75' >/n/bedroomAC/ctl` Since it’s all read() and write() operations your programming languages only need to use the few syscalls for read() and write() to write to the sound card or read a midi device.

I like thinking of a computer as a collection of resources behind services that comprises a node in a network accessible using a single protocol. With that being said, It appears the distributed Annex could enable similar behavior in an Ada OS where collections of typed objects can be served to clients. The OO Ada approach seems like it could offer similar mechanisms where collections of typed objects could be composed into the namespace of an executing program. Security would be interesting. And the idea of a fully typed OS where even the “file system” is a database of typed objects would make interop an interesting topic. e.g. how would you import a remote file system that as @dmitry-kazakov called a “named bucket of bytes” into a type-safe namespace?

---

<div class="post-metadata">

**Author:** ![OneWingedShark](https://forum.ada-lang.io/user_avatar/forum.ada-lang.io/onewingedshark/32/305_2.png) [@OneWingedShark](https://forum.ada-lang.io/u/OneWingedShark)\
**Post date:** [November 8, 2026, 1:46am UTC](https://forum.ada-lang.io/t/operating-systems-written-in-ada/4834/22 "2026-11-08T01:46:28Z")

</div>

> [@HawkerFrake](#):
>
> The Unix-like and POSIX clones are disappointing in the sense that they aren’t doing anything new or interesting3. .

IMO, the non-POSIX OSes are more interesting.  
(POSIX essentially devolving into: “It’s just another Unix/Linux!” in-practice.)

> [@HawkerFrake](#):
>
> I like thinking of a computer as a collection of resources behind services that comprises a node in a network accessible using a single protocol. With that being said, It appears the distributed Annex could enable similar behavior in an Ada OS where collections of typed objects can be served to clients.

I’m working on something that is essentially this; sans “one protocol”.

> [@HawkerFrake](#):
>
> And the idea of a fully typed OS where even the “file system” is a database of typed objects would make interop an interesting topic. e.g. how would you import a remote file system that as @dmitry-kazakov called a “named bucket of bytes” into a type-safe namespace?

Simple:

1. Use the “Management of External Data” SQL part; and
2. Leverage the idea of “views”, with
3. a fallback onto BLOBs.

---

<div class="post-metadata">

**Author:** ![HawkerFrake](https://forum.ada-lang.io/letter_avatar_proxy/v4/letter/h/3e96dc/32.png) [@HawkerFrake](https://forum.ada-lang.io/u/HawkerFrake)\
**Post date:** [November 8, 2026, 4:24pm UTC](https://forum.ada-lang.io/t/operating-systems-written-in-ada/4834/23 "2026-11-08T16:24:02Z")

</div>

> [@OneWingedShark](#):
>
> I’m working on something that is essentially this; sans “one protocol”.

I’d be interested to hear more. Assuming ASN.1 is involved?

When I say one protocol I mean a singular standard method to connect, authenticate and perform some kind of mount or posting to a bulletin board of available collections the user and programs can access.

> [@OneWingedShark](#):
>
> Simple:
> 
> 1. Use the “Management of External Data” SQL part; and
> 2. Leverage the idea of “views”, with
> 3. a fallback onto BLOBs.

Can you explain 1 and 2 a bit? I’m not familiar with SQL databases. I assume 3 means “raw byte stream”

---

<div class="post-metadata">

**Author:** ![OneWingedShark](https://forum.ada-lang.io/user_avatar/forum.ada-lang.io/onewingedshark/32/305_2.png) [@OneWingedShark](https://forum.ada-lang.io/u/OneWingedShark)\
**Post date:** [November 8, 2026, 4:55pm UTC](https://forum.ada-lang.io/t/operating-systems-written-in-ada/4834/24 "2026-11-08T16:55:15Z")

</div>

> [@HawkerFrake](#):
>
> I’d be interested to hear more. Assuming ASN.1 is involved?

Yes. Though at the “meta-level” — it’s used (a) to provide the serialize/deserialize functions in the metaobject level, and (b) for shuttling data between nodes.

> [@HawkerFrake](#):
>
> Can you explain 1 and 2 a bit? I’m not familiar with SQL databases. I assume 3 means “raw byte stream”

BLOB is indeed “Binary Large OBject”, a bunch of bytes; though the reason it’s a fallback is because many files have a stated format, which means that they ought to be viewed through that format’s “lens” and [de]structured that way.

This leads to the idea that DB views could be used: provide a view of the foreign OS, and operate from there. (Views are, in SQL, a way to make a query appear like a table; so you can eg have all the pertinent info from several tables and see items [sometimes update] all “in one go”.)

Which is kind of tangential to the “Management of External Data” part of SQL: an extension focused on allowing the database to query/manipulate/retrieve data that is not managed by the database. (ie It lets you treat remote databases, files, or web services as if they were local tables.) — You could imagine the [foreign] file-system as a degenerate foreign database, and interoperate with it that way.

---

<div class="post-metadata">

**Author:** ![dmitry-kazakov](https://forum.ada-lang.io/user_avatar/forum.ada-lang.io/dmitry-kazakov/32/522_2.png) [@dmitry-kazakov](https://forum.ada-lang.io/u/dmitry-kazakov)\
**Post date:** [November 8, 2026, 8:33pm UTC](https://forum.ada-lang.io/t/operating-systems-written-in-ada/4834/25 "2026-11-08T20:33:23Z")

</div>

> [@OneWingedShark](#):
>
> This leads to the idea that DB views could be used: provide a view of the foreign OS, and operate from there. (Views are, in SQL, a way to make a query appear like a table; so you can eg have all the pertinent info from several tables and see items [sometimes update] all “in one go”.)

My concept is that there is no I/O and there is no any mandated external representation of data. The data are stored in the virtual memory. This is achieved per mapping memory pages to the external storage. Naturally, the implementation of may include all sorts of checksums, encryption, transfer, all transparent and not the part of the OS interface. Same applies to the foreign and legacy formats. The driver of say ZFS would encode and decode using the corresponding filesystem format and ultimately present it as memory-mapped objects.

---

<div class="post-metadata">

**Author:** ![Tonyg](https://forum.ada-lang.io/letter_avatar_proxy/v4/letter/t/f14d63/32.png) [@Tonyg](https://forum.ada-lang.io/u/Tonyg)\
**Post date:** [November 9, 2026, 8:05am UTC](https://forum.ada-lang.io/t/operating-systems-written-in-ada/4834/26 "2026-11-09T08:05:44Z")

</div>

Im having a go converting multics to spark Ada in a gloriously impossible crusade at [Multics, in public — The Dark Factory](https://thedarkfactory.co.uk/multics.html) .  
Its possibly not something to use however as the forerunner of Unix allegadly.

---

<div class="post-metadata">

**Author:** ![kevlar700](https://forum.ada-lang.io/user_avatar/forum.ada-lang.io/kevlar700/32/1118_2.png) [@kevlar700](https://forum.ada-lang.io/u/kevlar700)\
**Post date:** [November 9, 2026, 1:33pm UTC](https://forum.ada-lang.io/t/operating-systems-written-in-ada/4834/27 "2026-11-09T13:33:54Z")

</div>

> [@HawkerFrake](#):
>
> The Unix-like and POSIX clones are disappointing in the sense that they aren’t doing anything new or interesting

That may be a blessing in disguise if you want compatibility with a chance of people actually using it.

---

<div class="post-metadata">

**Author:** ![dmitry-kazakov](https://forum.ada-lang.io/user_avatar/forum.ada-lang.io/dmitry-kazakov/32/522_2.png) [@dmitry-kazakov](https://forum.ada-lang.io/u/dmitry-kazakov)\
**Post date:** [November 9, 2026, 1:48pm UTC](https://forum.ada-lang.io/t/operating-systems-written-in-ada/4834/28 "2026-11-09T13:48:30Z")

</div>

> [@kevlar700](#):
>
> That may be a blessing in disguise if you want compatibility with a chance of people actually using it.

I would let that cross for Rust to bear. Ada deserves better application.

---

<div class="post-metadata">

**Author:** ![HawkerFrake](https://forum.ada-lang.io/letter_avatar_proxy/v4/letter/h/3e96dc/32.png) [@HawkerFrake](https://forum.ada-lang.io/u/HawkerFrake)\
**Post date:** [November 9, 2026, 2:30pm UTC](https://forum.ada-lang.io/t/operating-systems-written-in-ada/4834/29 "2026-11-09T14:30:18Z")

</div>

I use Plan 9 so I’m used to this. There’s no c++ compiler and I along with most of the community consider that a feature. The fun part is getting to think of and build new, interesting solutions with minimalist design. If I want to use a bloated mess like Firefox or Chrome I’ll fire up a BSD or Linux virtual machine.

All these different things bring interesting ideas to the table that people continually ignore so they can continue to drag along the last 40 to 50 years of mistakes. I’m bored with that mentality. Bring on new ideas that interoperate much more seamlessly, with security backed by safely.

---

<div class="post-metadata">

**Author:** ![blancolioni](https://forum.ada-lang.io/user_avatar/forum.ada-lang.io/blancolioni/32/703_2.png) [@blancolioni](https://forum.ada-lang.io/u/blancolioni)\
**Post date:** [November 9, 2026, 3:06pm UTC](https://forum.ada-lang.io/t/operating-systems-written-in-ada/4834/30 "2026-11-09T15:06:16Z")

</div>

[Rose](https://rose-os.org/)is a persistent, capability-based operating system written in Ada (with some SPARK bits). Communication is via interfaces. Persistence is everywhere - a file is a process (which implements the `File` interface) that supplies a stream when the appropriate capability is invoked. Files persist because everything does.

(I wrote the core by hand, Claude has been helping me get it to a state that approaches usefulness)

---

<div class="post-metadata">

**Author:** ![HawkerFrake](https://forum.ada-lang.io/letter_avatar_proxy/v4/letter/h/3e96dc/32.png) [@HawkerFrake](https://forum.ada-lang.io/u/HawkerFrake)\
**Post date:** [November 9, 2026, 5:07pm UTC](https://forum.ada-lang.io/t/operating-systems-written-in-ada/4834/31 "2026-11-09T17:07:29Z")

</div>

(oops, posted before I was finished)

Very Interesting design. I like how files are backed by a process, seems like a nice way to transparently handle IO with concurrency.

Does it require one to have a hard disk or can it boot from a remote disk over the network?

---

<div class="post-metadata">

**Author:** ![blancolioni](https://forum.ada-lang.io/user_avatar/forum.ada-lang.io/blancolioni/32/703_2.png) [@blancolioni](https://forum.ada-lang.io/u/blancolioni)\
**Post date:** [November 9, 2026, 5:40pm UTC](https://forum.ada-lang.io/t/operating-systems-written-in-ada/4834/32 "2026-11-09T17:40:25Z")

</div>

Yes, I’m having fun exploring the consequences of files as processes.

Right now there’s no network stack (that’s the next milestone after this one), so a hard disk is required. But there’s no reason it couldn’t read from and write to the network instead.

---

<div class="post-metadata">

**Author:** ![HawkerFrake](https://forum.ada-lang.io/letter_avatar_proxy/v4/letter/h/3e96dc/32.png) [@HawkerFrake](https://forum.ada-lang.io/u/HawkerFrake)\
**Post date:** [November 9, 2026, 8:07pm UTC](https://forum.ada-lang.io/t/operating-systems-written-in-ada/4834/33 "2026-11-09T20:07:31Z")

</div>

> [@dmitry-kazakov](#):
>
> My concept is that there is no I/O and there is no any mandated external representation of data. The data are stored in the virtual memory. This is achieved per mapping memory pages to the external storage.

This sounds very much like buffer pools.

I’m guessing you’d load some kind of query which lists needed file objects during program execution and the runtime automatically reads, essentially caching the file data to memory.

I’d be curious to see what such an interface would look like in comparison to the age old interface of `fd = open(); read/write(fd, ...); close(fd);`

---

<div class="post-metadata">

**Author:** ![dmitry-kazakov](https://forum.ada-lang.io/user_avatar/forum.ada-lang.io/dmitry-kazakov/32/522_2.png) [@dmitry-kazakov](https://forum.ada-lang.io/u/dmitry-kazakov)\
**Post date:** [November 9, 2026, 10:06pm UTC](https://forum.ada-lang.io/t/operating-systems-written-in-ada/4834/34 "2026-11-09T22:06:44Z")

</div>

> [@HawkerFrake](#):
>
> I’d be curious to see what such an interface would look like in comparison to the age old interface of `fd = open(); read/write(fd, ...); close(fd);`

I never considered it seriously. But it could be something like Ada.Directories. You get an Entity that refers to an object. From that you can get a Handle. Handle is a typed controlled object that is basically a wrapper of an access type to the RAM where the object sits in some protected address space. Ideally this should be hardware assisted, e.g. like Intel’s PMEM. The target is reference counted. Upon finalization the count is decremented. When it reaches zero and no call to Commit was made all changes are rolled back. Otherwise the changes persist. When the process dies its handles get finalized by the system.

---

<div class="post-metadata">

**Author:** ![HawkerFrake](https://forum.ada-lang.io/letter_avatar_proxy/v4/letter/h/3e96dc/32.png) [@HawkerFrake](https://forum.ada-lang.io/u/HawkerFrake)\
**Post date:** [November 10, 2026, 1:42pm UTC](https://forum.ada-lang.io/t/operating-systems-written-in-ada/4834/35 "2026-11-10T13:42:56Z")

</div>

> [@dmitry-kazakov](#):
>
> Ideally this should be hardware assisted, e.g. like Intel’s PMEM

Too bad PMEM (Optane) has been discontinued. There was never any intent to offer consumer grade hardware outside of the M.2 disk cache for mechanical disks which was too late as flash could compete with mechanical. Plus there’s no current major OS which supports any form of program level persistence. Best we have in terms of persistence are sleep states on the PC and probably copied by the Apple Arm.

I’ve always wanted not only persistence at the application level but migration ability to other machines. It would be be very handy to freeze a program, store it, then unfreeze it on another machine. Though it’s tricky, especially if it depends on a lot of specific resources. Could even be a way to send a broken process to a dev for debugging, memory and all. Having the resources typed means emulating them becomes easier in these situations.

---

<div class="post-metadata">

**Author:** ![dmitry-kazakov](https://forum.ada-lang.io/user_avatar/forum.ada-lang.io/dmitry-kazakov/32/522_2.png) [@dmitry-kazakov](https://forum.ada-lang.io/u/dmitry-kazakov)\
**Post date:** [November 10, 2026, 4:35pm UTC](https://forum.ada-lang.io/t/operating-systems-written-in-ada/4834/36 "2026-11-10T16:35:57Z")

</div>

> [@HawkerFrake](#):
>
> It would be be very handy to freeze a program, store it, then unfreeze it on another machine.

Compare it with agent architecture in its original sense before the term was hijacked and watered down. You could migrate a program (agent) from node to node. In an OO OS it should work out of the box, a kind of UNIX fork() on a completely different level of abstraction.

---

<div class="post-metadata">

**Author:** ![sbenitezb](https://forum.ada-lang.io/user_avatar/forum.ada-lang.io/sbenitezb/32/285_2.png) [@sbenitezb](https://forum.ada-lang.io/u/sbenitezb)\
**Post date:** [November 10, 2026, 5:32pm UTC](https://forum.ada-lang.io/t/operating-systems-written-in-ada/4834/37 "2026-11-10T17:32:04Z")

</div>

I remember the era of IBM bees I think they were… Implemented in Java. I don’t know what was the use, besides distributed architecture.

---

<div class="post-metadata">

**Author:** ![HawkerFrake](https://forum.ada-lang.io/letter_avatar_proxy/v4/letter/h/3e96dc/32.png) [@HawkerFrake](https://forum.ada-lang.io/u/HawkerFrake)\
**Post date:** [November 10, 2026, 6:05pm UTC](https://forum.ada-lang.io/t/operating-systems-written-in-ada/4834/38 "2026-11-10T18:05:29Z")

</div>

Still lives on as Oracle Beehive.

[Previous page](https://forum.ada-lang.io/t/operating-systems-written-in-ada/4834.md?page=1)
