OnexOS: an operating system without apps!
OnexOS is a proof-of-concept of an operating system without apps! That's quite a dramatic change, so why do that?
As we will demonstrate here, there are correspondingly dramatic benefits to building this. It can deliver freedom from the "traps" of apps, online services and Big Tech, and deliver unprecedented empowerment over the devices and data that we're actually supposed to own ourselves.
In fact, dropping the apps in our radical operating system leads us down a path where we discover the power of the link, which is central to re-structuring, re-decentralising and re-activating our shared data...

No apps, just files

Let's go through with a thought experiment: imagine a PC or mobile without apps, what would be left; how would you do anything? You'd still have all those widgets for clocks, WiFi and battery status and so-on. You'd presumably still have access to all the other system and machine settings and status.
But, more importantly, you've still got a filesystem full of files. Just no apps to animate or activate them.
On a PC you'd have a desktop covered in files. On mobile you'd just have an empty wallpaper where the apps should be, but that could easily be replaced by a file manager, too, showing all your files instead. You could argue that a file manager or desktop is itself an app, but files are fundamental to any operating system, and they always ship with a file manager that's closely integrated.
So, what then? Well, you can actually do quite a lot around just the files-and-filesystem model.
Firstly, there are the preview options. You've seen how photos can be shown in a file manager as small versions of themselves, and you may have seen that feature where if you hover over a video file, it shows a small window playing it.
Do you really need a separate gallery app, if the file manager could be used instead? You would probably use the file manager's time-ordering to view the photos in the order they were taken.
Secondly, you can move, rename and delete files, and create folders to organise them. Every app seems to have its own move, rename, delete, group and organise functions. Without apps, you could have just one integrated, universal and frictionless way of doing these functions for all file types.
You just need a way to create and edit these files in the first place!
Let's dig deeper and see how far we can take this, and see what the advantages of this approach may be...

Creating and editing text and media

A common data or file type we want to create and then edit is text, along with images or videos. This is what we do in notes and documents apps, as well as when we use the camera app.
Instead of having separate notes and document creation and editing apps with their own ways of doing things, we could benefit from having a single uniform way of typing and editing text. This would be similar to the file preview function: if you see a note or document file, you can simply go in and edit it directly via the file manager without waiting for the file's associated app to fire up.
If you're on a mobile device and want to take a picture, you can imagine your photos folder or "gallery" having a big plus "+" button at the top to allow a new photo to be added right there.
So, you go to your notes folder and see the time-ordered collection and quick preview of each. You want to create a new note, so you hit this folder's big plus "+" button and get typing. Now it needs the picture that you just took, that's over in the gallery folder. As you expect, you simply also use the file manager to select the photo to drop in.
But what happened there? What does "drop in" mean? Does the note file now balloon in size because it has a complete copy of the photo? In most apps that's exactly what happens, because each app thinks it should control everything about the data or files it is responsible for.
But we don't have apps any more, so don't need to waste this amount of disk space with redundant copying. We could simply have a link in the note file to the photo file. To see how this would work, we first need to explore the concept of the link...

Links

Normally, when we say "link" we mean a web URL, pointing at a page on an online server. But it can also point to a local file; in Windows you may say "shortcut". And it can also point to a file on a local file share server.
You should be familiar with the concept of a file's path: it has both a file name and a containing folder, so you may have a photo who's file path is something like these:
C:\Photos\img-143143.jpg
/Users/frank/Photos/img-143143.jpg
You may also be familiar with file shares, at work or at home: remote files that look and behave just the same as local ones, on servers or even on another person's PC. Now our links can point to files and folders on other devices, as network share paths - links across machines like
smb://franks-server/Photos/img-143143.jpg
You may also have noticed that the Web's URLs often work the same way as file paths, so you could fetch a photo on the URL:
http://franks-server.com/Photos/img-143143.jpg
In all cases these "links" are just a short piece of text pointing to a file. This can be used to refer to it and fetch it when needed.
Now, in fact, if you take off the file name, you're left with the containing folder name:
C:\Photos\
/Users/frank/Photos/
smb://franks-server/Photos/
http://franks-server.com/Photos/
These are also a valid "links" - but now they are links to a folder, a sequence or collection of files.

Using ids for links

But hold on: this is quite a limited approach! We can do better in our operating system. Doing things this way means we are forced into a "tree" structure where you only have a hierarchy of folder-folders-folders-files, branching deeper.
But what if we see a folder as itself simply a collection of links, to either more folders or to files? Consider a folder with this link:
C:\Photos\
Containing two photos with these links:
C:\Photos\img-143143.jpg
C:\Photos\img-629319.jpg
Why don't we break these photos free of their single containing folder, by giving them unique IDs instead:
C:\Photos\img-143143.jpg => unique-id-photo-143143
C:\Photos\img-629319.jpg => unique-id-photo-629319
So now their folder is just a collection of those IDs:
C:\Photos\ = (unique-id-photo-143143 unique-id-photo-629319)
This allows us to have another folder that also links to some of the same photos, or others:
C:\Photos-Barbados\ = (unique-id-photo-143143 unique-id-photo-002188)
We can go further, and assign a unique ID to folders as well as files:
C:\Photos\          => unique-id-c-photos-3323
C:\Photos-Barbados\ => unique-id-c-photos-barbados-6210
So now we have:
unique-id-c-photos-3323          = (unique-id-photo-143143 unique-id-photo-629319)
unique-id-c-photos-barbados-6210 = (unique-id-photo-143143 unique-id-photo-002188)
Now instead of tree-like filesystem structures, we could create arbitrary webs with circular loops, where folders can end up linking around to themselves:
unique-id-c-photos-3323          = (unique-id-photo-143143
                                    unique-id-c-photos-barbados-6210
                                    unique-id-photo-629319)

unique-id-c-photos-barbados-6210 = (unique-id-c-photos-3323
                                    unique-id-photo-143143
                                    unique-id-photo-002188)
Which is much more powerful and freeing. Our gallery above that was a rigid collection of photo files can now share photos with other galleries and we can have galleries that link to and from each other arbitrarily.
In fact, the link is a fundamental, pervasive and powerful concept that emerges from the elimination of apps. There are three pillars building the power into our links: Structure, Sharing and Semantic, allowing us to respectively re-structure, re-decentralise and re-activate our shared data.

Structure Links

So, back to the situation where we were editing a new note and needed to drop in the photo we just took: we simply drop one of these links to that photo into our note. It grows in size a little, but there's no redundant copy of the entire image. Another benefit is that this can be done many times, in many notes and documents, at near zero cost.
Now, let's take this further: if we look inside the note, how is it structured? It's basically a sequence of text paragraphs, then the link to the photo, then more paragraphs. So, why shouldn't those paragraphs also be linked to, in the same way as the photo? That way, you could share both photos and paragraphs between two notes or documents by simply dropping their links in. You'd have a single paragraph text file in some folder, and notes and documents that link to it. Now, if you change the paragraph, it updates everywhere it's used!
In the old days of apps, where some apps so jealously guarded their data that their files were in a closed, proprietary format, you wouldn't be able to even think of doing this. But now we've thrown the apps out, we can start to dig in to their files and think about how their structure can be re-structured to suit us.

Notes are also like galleries

So, thinking a bit further here, we have two ways of doing the same thing: we have folders that are just sequences or collections of links, and we have notes or documents which are also sequences of links to paragraph and photo files. Perhaps folders and notes or documents can be made the same - in the same way that we re-purposed folders for our photo gallery. Couldn't we simply use folders for documents too, and drop the idea that a document is a "file"?
A note or document is then just a folder containing a sequence of links to paragraph and photo files. Our operating system or file manager has to spot that a folder is set up like that, and present it to us as a document or note instead of just a simple folder, in the same way it gave special treatment to gallery folders.
Of course you can now drop another note folder link into a note, alongside the paragraphs and photos, to nest them and have notes linking to and from each other. The operating system can show a nested note in a way that it can be either expanded in-place, or jumped into.
In fact, since we're freeing our minds here - why not just drop into your note the link to a whole photo gallery? Again, the operating system rendering your note to the screen would show it in reduced form in-place, and allow you to scroll it or jump into it.

Personal web

So, without any apps, and indeed because we dumped apps, we have now built a personal web of notes and documents made up of shared images and videos, all pointing to and from each other in collections and sequences.
We've actually arrived at a model for data that's becoming popular in apps such as Obsidian, Roam, Logseq, Notion, Tana, etc. These allow you to wire notes and media into personal planning, thinking and mind-mapping spaces. But we're making a whole operating system like that, not just a single app.
So we have a personal web - why not just use the existing Web? The primary difference at this point (there's more to come!) is that the stuff at the ends of our links isn't complete web pages or documents, because we've deconstructed documents down to their basic elements: paragraphs and media. Unlike the Web, we can embed not just images in our pages, shared with other pages, but individual paragraphs or other text chunks, too.
But there's more. Once we start digging deeper into the files that used to be created and used by apps and breaking them up into smaller chunks we can find all sorts of nuggets we can use in our personal webs of data, simply by pointing at them with links, and taking us even further away from the big-document Web into a web of data chunks.

Diversity of types

For example, a list of notes from a notes app could also be a list of to-dos, if there were a dash before each item, or could be encoded into a special to-do format from that same app. There are calendar events or addresses and phone numbers either casually written into a note, or encoded into ics and vcf files. Every photo has "metadata" giving information about the location the photo was taken and about the camera that took it.
If each of these types of data were extracted into little chunks that we can link to, then we can re-structure everything to suit ourselves. Why not have a calendar event pointing at a single relevant to-do? When you check the to-do off in the to-do list, it's also shown "done" in the calendar event.
Of course, a folder full of calendar events is rendered as a calendar, without needing a separate calendar app. A folder of contacts is your "contacts app"! A folder of to-dos could render with a count of jobs still left to do.
Without apps, we are free to play with this data in new ways, to combine it all in ways that no app would previously allow, by simply dropping links between them and collections of them. We can create a collection of and between one to-do, three notes, five photos and two calendar events, and no app developer can stop us!
Data is no longer jealously guarded by individual apps and in inscrutable formats. All our data is out in the open, in open standard formats that all devices running this operating system can understand on sight. We've broken free of the "app trap" and can use the power of links to organise our digital lives freely the way we like in our own personal web of data.

Sharing Links

So, we've thrown out apps and their control over local data. But what about apps that work online, and their control over our remote, online data? What happens to us when using an operating system without those apps when we follow the links, files and collections model through?
You'll recall that we mentioned fileshare and URL links above, because files needn't just be on our local machine - links can point directly at files and folders on other devices on the network. A file or photo can be local or remote, it looks the same. Now, without any special app, we get file sharing, including direct, peer-to-peer file sharing. We can directly share notes, events, media, etc, between our PCs and mobiles and those of our friends, as long as the links allow us. Thus we can extend our personal web to link up with the personal webs of our friends and family and co-workers. Obviously, this needs a permissions system.

Peer-to-peer web

Again, we are sailing close to the existing Web here. But there's another crucial difference with this approach: we're not using any central servers, just using links that point directly between our personal machines, peer-to-peer.
At this point, our operating system is actually our "browser", so that's another app we no longer need. Our links are the unique IDs described above. We never actually need to see what these IDs look like, in a way similar to the way current browsers are hiding URLs. Others have thought about the merge of operating system, file manager and browser, so this is not a radical concept.

Chat without apps

What about WhatsApp, Facebook and Twitter? (presumably if you're reading this you're not young enough for that list to include Snapchat and TikTok ... oh, how this page will age!!). We don't just use text and media for our personal organising, but also for text messaging, email, WhatsApp, and so on. These apps exchange text and media with other people. WhatsApp also lets you make live video calls using the camera, and we've got a phone app, too, also using the microphone and camera. How can we implement all of this messaging and video calling functionality without separate apps?
As for live video calling: what if our cameras had links, too? If you viewed any camera via its link, your own or someone else's, you'd see what it sees. Taking a photo file is now basically grabbing a copy of the camera "file" at a point in time. Making a video file is saving a series of copies between a start and end point in time.
For messaging or chat, let's review what we do have: an operating system that doesn't need any apps to allow us to directly create, view, edit and delete files of various types like text, media, to-dos, events, etc; organise them in collections including galleries, documents and calendars and manage them by their links and share everything across machines, across the network.
So in fact, we already have the pieces in place to implement chat: a chat room or group is a folder, containing text and media messages as files, in the same way that we made our gallery and document examples. We just need to view the folder in time order, with latest at the bottom. Both email and chat apps can work this way: a chat app has a sequence of messages in time order; an email app has a sequence of emails in the opposite time order. Why do everything multiple times over, for each app, when the concepts are basically the same? In the same way as galleries and documents, this would clearly require a slick user interface aware of the chat or email folder type, to allow the viewing and new message creation to be as smooth as WhatsApp and email clients.
Of course, there's something else to add: how do we post a new message?

Sovereignty

For galleries, folders, documents, to-do lists and calendars, we have a big plus "+" button to add a new photo, file, paragraph, to-do or event. So it would work the same here, except, who owns the folder representing the chat group or room?
The solution delivers one of the key freedoms and empowerments of this app- and service-free approach using links: sovereignty over our own data.
The way it works is that you create a folder representing the new chat room, then share its link with some friends, setting appropriate read permissions. You can obviously post a welcome message there, too. Both of these, the room folder and the welcome message, are hosted on your own PC or mobile, and the links to them that you shared allow your friends to fetch them both directly over the network from you, peer-to-peer.
Now, one of your friends wants to reply, so hits the plus "+" button. She types in her message. This message is hosted locally to, and will always be owned by, her. We now just need to get a link to her message into the chat folder. The operating system takes care of this for us by shipping her message directly to your device and to the chat folder, which has some internal logic that fires off, allowing the folder to add the link to the incoming message. We'll talk more about this internal logic in the next section.
Data is no longer jealously guarded within separate service apps - the "walled gardens" of Big Tech, in their remote and private databases. All our data is safe on our own devices running this operating system sharing directly. We've broken free of the "service trap" and can use the power of links across our devices to co-create webs of data without fear of censorship or surveillance.

Objects

It's time we started to use a more appropriate terminology than "file", "data chunk" and "folder". We've come so far from an actual filesystem at this point, especially now that we've got documents actually being "folders", folders being collections of unique IDs and file paths replaced by those IDs, that it's stretching these terms too far.
From now on, we'll refer to both files, or data chunks, and folders as "objects". A folder is just an object with its own ID that's a list of IDs to other objects. All objects link together into a single global web called "The Object Network".

Semantic ("Spreadsheet") Links

We've come a very long way with just the most simple of building materials: the link and the collection of links, to files of data, or objects. But it's still not quite enough. The final use of links is the one that gives objects more complex behaviours than these, but still without them being encoded into inscrutable apps.
Earlier, we alluded to the behaviour of a to-do list, keeping a count of jobs still un-done. We also just described a simple behaviour of a chat room folder object reacting to an incoming message object from someone permitted to read and post there, adding a link to that message at the end of its sequence of links to previous messages.
Where does all this behaviour get built and run, without apps? Also, what about the "presence" of a person using a chat app? How do we implement that? We've also described the camera "file" or camera object, that is always letting us see what it's pointing at, which seems a little more "behaviourie" than a simple, usually static, file.
Also we've so far not got around to talking about how we'd implement other more complex functionality in our app-free operating system, like a calculator app.

Internal animation

All our objects in this app-free world are going to have to be "internally animated". An app normally wraps and traps our data, so any behaviour can only come from the app, and any data we could have access to is inert until animated by its owning app.
But without apps, we need to turn everything inside-out: instead of seeing the app first and the data being largely hidden by it, we see our data first and it's the behaviour that is hidden. Our data, our objects, are internally animated.
Further, without apps to manage the dynamics of our digital lives, we going to have to see stuff as soon as it changes! This is the third and final difference to the Web. On the Web, and indeed when fetching files from a file server over the local network or internet, you have to hit the refresh button to see if there have been any updates. In this app-free operating system, that isn't good enough. If some object changes, those changes have to be pushed out straight away to everyone that's watching.

Input and output objects

But who or what is watching? In a world of objects and no apps, everything ends up being an object, including the operating system's connections to and from the real world.
In a similar way that the camera we described before is an object that is "live" and can be viewed as it changes, there's another object we've not yet introduced you to: YOU! Yes, your "presence" actually has to be another object itself. So, if I have the link to your "you" object, I can watch you just like I could watch your camera. A person object, if you had permission to watch it, would simply be an avatar-like thing.
So, of course, this is starting to look a lot like a 3D virtual world. Just like in a virtual world, the person/avatar is able to go around changing stuff. So as you type a new message in the chat group, that new message and all its edits - all its internal animation - is being driven by you.
But the camera isn't something you're driving. In this operating system there's also going to be a clock object, which just ticks away, setting the current time without you going in to edit it.
Things like this are representing inputs. In the same way that the user, person or avatar object represents the actions coming in to the virtual world from the user, a camera or clock inputs the camera's real-world view and the real-world current time, respectively, into the virtual world.
There are also outputs. The avatar-like person object representing you can itself watch other objects, as they animate. The person object is viewing or present somewhere and sees the changes of the part of the world it's watching. That's an output, from the virtual world to the real world. Similarly, there is a vibration motor and an indicator light on your mobile device that are outputs - there would be a corresponding motor and light object in the operating system's virtual world driving them.

Like a spreadsheet

So, back to those other internal behaviours outlined above, like the to-do list counter or the chat group new message function. A calculator exists to save you doing the work, so its behaviour has to be programmed! When the clock's alarm goes off, or when a calendar event is due, that object has to trigger some kind of notification. These aren't driven by input or output, they have to have internal logic to drive their internal animation.
We could just go back to the app-like way of doing things and let some techie write these behaviours, and that's a genuine option that will be used for common behaviours. But this operating system is all about empowering the person using it, not the far-away techie! And the most common way non-techies do programming is the spreadsheet.
You may be familiar with how a spreadsheet has cells whose value can be programmed with simple formulae to depend on the values of neighbouring cells. In this operating system, we can do something very similar: we can say that an object's whole state depends on the state of neighbouring objects. By "neighbouring", we mean "linked to", of course, since that's how we do things here. So an object links to another object that it depends on. When that object changes, this one does, too, according to some formula.
To go over all the examples:
The to-do list object links to each to-do it contains. But it can also depend on them so that it counts up those to-dos still not in a done state, and sets its counter accordingly.
The chat group list also depends on the state of any messages that claim to or want to be in the chat history, so will add the incoming message link as soon as it becomes aware of that message's state, pushed to it by the peer operating system.
If you are viewing a calculator object, the operating system can let you create or input an "expression" object that you want calculated. The operating system then notifies that calculator of this object. Now the calculator object's state depends on that expression, triggering its internal logic to in turn set its "result" to the answer, rendered back to the user. If the user edits the expression, then, as in a spreadsheet, the calculator object instantly updates its result.
Finally, an alarm object and a calendar event object are basically the same thing, except the alarm needs a more persistent notification perhaps. These objects clearly depend on the clock object so have a link to it, and watch it ticking away. Then when their time is due, set their state to, well, "due", perhaps. Because the user, through their "avatar" object, has been viewing them before, their object sees the "due" state and alerts the actual, physical user on the other side of the input-output interface that the time is up.
Of course, one great thing about our approach is the way that, unlike in spreadsheets where everything is local to the current worksheet, we can set up dependencies across machines anywhere on the Object Network, between distant and disparate parts of our shared personal object webs.
The details of the programming language are for a more in-depth article than this one, as a whole new revolutionary programming language for our whole new revolutionary operating system is quite an undertaking!
Data is no longer jealously wrapped and animated like a puppet by apps written in obscure programming languages. Like in a spreadsheet, it's out in the open and it's the internally-animating formulae that are hiding in the back. We've broken free of the "techie trap" and can use the power of links to set up inter-dependencies between data in our web of objects.

Some loose ends

So, nearly at the end of this article, and there are some loose ends we should tie up in thinking about how this operating-system-without-apps would be used.
Firstly, we've hinted above that we're pretty much creating a virtual world with this approach, and so there's no reason not to experiment with 3D as the default user interface to our radical operating system. This expands the "thinking space" concept into quite a novel direction. You could at least imagine 2D panels in a 3D world rendering many of the above object types as a starting point. Then implementing a game without isolated game apps becomes interesting: do you have a space over here reserved for that game? Can items from one game be taken into another?
The Network of Objects is a good match to the "Internet of Things", where each Thing is of course an object. Imagine a light output object with a link to a switch input object, and an internal behaviour that turns it on or off depending on the state of the switch.
What about media apps like Spotify, Netflix and YouTube? Like all apps, we don't have an alternative for their offering unless they feel like joining us, one day. But if we want to produce and publish our own music and videos, then of course we get to ship them out, peer-to-peer, without the pervasive censorship and narrative alignment enforced by these Big Tech offerings. It's a subject for another article to discuss people-centric alternatives to "Intellectual Property", but clearly peer-to-peer networks are generally able to be light on compliance there.
What about maps and navigation? Say you have a folder or collection object of objects with GPS coordinates. Just like all other special folder types, the operating system would render that in a special way: in this case as a map with pins on it for each object in the collection. The map tile layer objects would have to be fetched from somewhere, of course, for the area being shown. Now, if you had a "route" object with start and end coordinates, this could be rendered as two pins on the map, then the internal logic of the route object kicks in with the route details, and the operating system renders the lines of that route.
In the old app-based approach, you'd have a separate map for every app that wanted one. Now, we can throw a map together from objects from any source. We could have a collection of objects including some photos, the current location of the family, and a pub you were all meeting at. We could watch everyone converge in real time on the pub.
Similarly, we've freed calendars from apps: instead of a calendar locked away in each app that needs it, we can throw objects with start and optionally end times into a folder or collection object and view that. The operating system will show this object as a calendar. So we can make new calendars any way we like for any purpose.
One thing we may throw into a random calendar is the weather: weather forecast objects could be imported into the Object Network as input objects from an existing internet weather server.
Talking of importing, where-ever there's an internet protocol (or "API") available, that data can be imported into or exported out of our Object Network. So, the web, email, news feeds, chat systems, and so-on. Even without apps, we can still get the week's weather and catch up on the news, while communicating with everyone in the Land of Apps.
One of the top things folk do in the Land of Apps is search. The Object Network can easily support people building indexes of "crawled" content just like a search engine does, only now the things being crawled, scanned, indexed and returned to search queries are objects, not web pages. Of course, since everything is a live object, your search queries and search results lists are also objects, so you can save them or watch their results change.
One objection that could be easily be made to this operating system is that it takes over everything: takes away the owner's choice to install alternative apps that work better for them. You can't just install another map, calendar, gallery, todo or notes app that you prefer, or another camera, clock, calculator or phone, you seemingly just get the render and interaction provided by the operating system.
There are two answers to that. Firstly, few people in reality actually replace the supplied calendar, map, gallery, camera or phone apps, most use the default stock app for 90% of their needs. Secondly, the operating system just provides a vanilla interaction for known object types. But you can extend everything, because one of the vanilla types is a general purpose user interface builder, by analogy to HTML forms. Again, that's a topic for another article.

Conclusion

Starting with the radical premise of "an operating system without apps", we've gone on a journey where we've discovered the power of the humble link to free us from the three traps of Big Tech: the app trap, the service trap and the techie trap. We've seen how the pervasive link can empower us to re-structure, re-decentralise and re-animate our shared data and enable us to create a global data fabric - owned by everyone, and by no-one. Such an operating system can restore true ownership of our devices and our precious data right back to us.
These concepts are being explored in the OnexOS operating system. OnexOS is a proof-of-concept of this revolutionary way of rebuilding the tech stack from the ground or from the "metal" up. OnexOS runs on every kind of computer from tiny wearables and home automation devices up to internet servers, via our mobiles, tablets, PCs, TVs and games consoles. The initial primary target is the Raspberry Pi 4 and CM4, as these are very popular, well supported and flexible devices that can behave like, well, tablets, PCs, TV boxes, gaming machines and internet servers...
This reimagining of our internet experience created by OnexOS is called The Object Network.

Read on

To read on, go here, here or here for an expanded view of this approach with examples, or here to read about the smartwatch version.
There's also a list here of many more, broader and deeper, articles and presentations about the Object Network.

OnexOS is still under development. If you want to get involved as an early adopter and tester, get in touch!
Duncan Cragg, 2023. Contact me