My ideal operating system
First considered in June 2024.
First published June 30, 2024.
Most recent meaningful update on December 10, 2025.
Most recent miniscule update on December 11, 2025.
Anonymous 05/05/18(Sat)15:45:20 No.45166513 ▶
If only you knew how different things could be.
The initial question
An underwater-basketweaving forum I’m on sometimes talks about technology topics. One question someone asked once was “What’s your ideal operating system?”.
I’ve been chewing on that since.
The scope of the problem
I’ve been watching fairly alternative OSs like Haiku (the BeOS clone) and I wanted to really clear the slate and assume multiple orders of magnitude of work done just for this OS. Otherwise an operating system is just a way to run stuff that people can already run on a Linux distribution or macOS.
Originally, here I said “This is a desktop operating system” but increasingly I’m coming around to the notion that all great modern computing platforms are entire ecosystems and not just a pile of bits that one throws on commodity hardware. Because of this, I’m also specifying stock peripherals like monitors and keyboards and thinking about ways to have peripherals — like wireless headphones — shared between all your devices without an Apple Account coordinating permissions behind the scenes.
It does not assume a 1:1 correspondence between people and computers.
It won’t have bugs.
Hey, stop laughing. If I’m describing my ideal operating system, then it simply won’t have bugs in it.
The system will be thoroughly well-documented at all levels.
Furthermore, anyone working on fixes to the bugs (because in order to have no bugs, one must fix bugs) will be allowed and even encouraged to contact the person experiencing the bug and ask for more information. This will happen without the bug reporter having to go through extreme measures to replicate the bug in front of someone who can do something about it — like taking it to the house of the SVP of software engineering. As you might guess, this sort of process won’t work unless you’re the SVP of something else in the organization.
The operating system’s place in the world
The UNIX conception of a file is “a block of bytes of finite length”.
Not all operating systems and file systems have agreed on that, though. macOS today still has type and creator codes (so, theoretically, most JPEGs open in Preview but the one you made in Acorn opens in Acorn when you double-click on it), but barely anyone uses them and even more old-school uses of extended attributes are pretty much only limited to BBEdit which will store per-text-file settings in them, but no critical information in them.
I want this OS to be similar, probably. The Internet touches basically everything and we don’t want to have an OS that leans into complicated definitions of “a file” and ends up being an isolated hothouse flower that is only good for solo work that is never shared except by packing the whole thing into a VM and having other people run it in VirtualBox or similar (I’m thinking of TempleOS as I write this).
However, there’s a lot out there that is just…annoyingly suboptimal.
If we’re willing to say “this OS has no bugs” by magical fiat, then we can say the following:
- Common utilities, no matter how complicated, will be rewritten to conform to platform norms.
This means:
- our `ls` will be more like eza than anything else.
- we’ll use djot as our main plain-text markup, but conspicuously fail to implement the automatic em dashes and quote curling (our text editors will automatically curl and make proper dashes, and if not, there are dedicated keyboard combinations for all those)
- our `dd` will not have one-off syntax replicated nowhere. `dd if=debian.iso of=/dev/disk/8` will not be a thing.
- we probably won’t call it `dd`, either.
The hardware
People who are really serious about software should make their own hardware.
— Alan Kay
Well, I’m not making anything — only dreaming it all up — but the point stands. See my quip above that reads “all great modern computing platforms are entire ecosystems and not just a pile of bits that one throws on commodity hardware”.
Monitors
There will be a couple of monitors for sale.
- 3840×2160 (4K), 24″ @ 30–120Hz
- 5120×2880 (5K), 27″ @ 30–120Hz
(I’m not sure what a good 6K size would be. The current iMac has a “4.5K Retina Display” which is 4480×2520. I’m tempted to suggest a doublewide 4.5K at 8960×2520. Not curved.)
(I’m also on the fence on offering a 4K 27″ monitor for people with bad eyesight.)
Also see the discussion on my ideal-setup page for oddball (4:3) monitor sizes:
Their features:
- USB-C-shaped input (might be Thunderbolt 4 or 5)
- HDMI input
- DisplayPort input
- variable refresh rate (30–120Hz)
- an excellent microphone array capable of canceling noise
- a good, fixed camera tuned to take video of one person alone sitting in front of the monitor
- wide color (P3)
- True Tone (automatically adjusts the colors to match the color temperature of the ambient lighting)
- automatic brightness changing (so if the room gets darker, the monitor does, too)
- OK-ish speakers
- 3.5mm headphone jack out
- 3 USB-C ports out
- On/off button
- brightness and input controls
The system’s underpinnings
(Maybe sort the subheads here better, or at least establish an order.)
The system programming language
It will be largely written in a modern, performant, ergonomic, safe language like how Swift 6 is shaping up to be. The idea is to have something with Rust levels of safety yet not be quite so ugly.
Unlike Swift, the compiler will not have crashing bugs.
The compiler will support LSP use.
Interaction styles supported
It will be a GUI-required OS, like macOS and Windows (and unlike Linux anything).
Syncing
One thing that modern users have come to expect is that there are ways to sync preferences and data between the different computers and sub-computer computing devices that a user owns.
This kind of data includes, but is by no means limited to:
- contact data
- calendar data
- reminders data
- passwords, passkeys, and time-synchronized one-time passwords
- actual honest-to-goodness files
iCloud performs this sort of functionality in the Apple ecosystem. Microsoft’s current operating system does something similar. It uses the term OneDrive for its file-sync functionality, whereas “iCloud” covers all sorts of different services.
My ideal OS would be able to do this between multiple computers without a central server.
While Syncthing-style relays may be useful for facilitating state syncs across the Internet, this functionality should not depend on them, and people ought to be able to disable that functionality easily if they are OK with having syncs only happen when all the computers involved are on the same LAN.
Syncthing is very good, although not perfect.
CRDTs are useful technology, although they’re by no means perfect:
Iroh might also help:
“AI”
Machine-learning techniques can be useful, but absolutely nothing is going to be farmed out to other machines. This may mean that work is duplicated. That’s fine.
This is essentially the way Apple used these techniques before introducing what they call “Apple Intelligence”.
Virtual machines and chroot jails
These are useful technologies.
Sandboxing
The macOS way is kind of awful. Nobody likes it. Maybe there’s a better way.
Document-type and -format preferences
YAML is good.
A bunch of files in a zipfile is good.
Typst is good. CommonMark is OK, but Djot is even better because it’s more featureful and easier to parse.
However, Djot has a number of features in it that seem like they’re aimed at people who don’t use a setup that will automatically curl quotes. These are anti-features in my ideal OS, so they get thrown out and we have to think of a name for a Djot clone. I don’t like its Symbols feature, either, because it’s very obviously a hook for nonstandard extensions.
You know what else is good? Text files and their dependencies in a zipfile. ePub and .docx are like this (although they’re both moderately warty formats, at least). Typst-and-referenced-images-in-a-zipfile would also be good. Ditto djot.
I’m at a total loss to think of how HTML+CSS+JavaScript could be done better, but Steven Wittens isn’t:
This might be thinking small, but I’d like to bring (back) parts of XHTML 2, the never-finished W3C Recommendation that basically killed off the W3C with a too-annoying-to-implement standard and left the WHATWG to pick up the crown that the W3C just chucked into the gutter:
Interesting ideas it had that died with it:
- any element could have href on it, not just <a>
- heading level is defined by how many containing <section> elements an <h> element has (this was brought over to HTML 5, but the document outline algorithm was abandoned years later because no browser or screen-reader vendor bothered to implement it, and the standards people wanted to stop baiting website authors into writing HTML that would make screen-reader usage worse)
- the <l> element for explicit lines (no <br>)
- <blockcode>, because really is it better to have <code><pre> or <pre><code>?
Ditching <h1> through <h6> for just <h> sounds nice in theory, but I can’t think of a nice way to turn a Markdown-like language into HTML like that. (Markdown only got popular after XHTML 2 was floated and died off.)
Filesystem layout
I’m not entirely sold on the UNIX “everything is a file” philosophy, but it’s likely within spitting distance of what I want in the end. I’d likely have a better opinion about this if I’d used Plan 9 in any capacity. That said, Plan 9 is designed, as far as I know, networked in a hierarchical relationship and I’m not sure if that’s the sort of model I’d want in my ideal OS unless I want my ideal OS to cater to use cases of working well as an owned-by-someone-else machine.
I think GoboLinux has more or less the right idea when it comes to filesystem hierarchies:
I think “everything in /Programs” is a bit too flat. I’d want multiple domains for, say, programs, much like how macOS is organized:
- /System/Programs (handled by the OS)
- /Users/All users/Programs (installed by an administrator for all users)
- ~/Programs (per-user installs)
macOS has — or at least had — a /Network domain, where some kind of master server could supply programs.
Like in macOS, spaces will not be shied away from.
Unlike macOS, everything will be sentence-cased, not title-cased. Imagine “~/Library/Application support/” rather than the same with a capital S. This may very well cause confusion in cases like, say, “~/Library/Application support/Google Chrome/”, because people will have to remember what’s a proper noun and what isn’t.
I may totally flip on system directories and declare that all-lowercase kabob-case directories are the winning play, à la “~/library/application-support/”.
“Files and folders that start with a period are hidden by default” seems like a perfectly adequate convention worth carrying over to my ideal system. Of course, one should also have a way to hide files without changing their names.
Encoding file name information through multiple parts of a directory path, and dealing with the consequences
Assuming you haven’t saved this page to a file, you’re using a URL that has important information scattered throughout its hierarchy. “/os/” doesn’t say much about what this page is about, but “/ideal/os/” does.
Making sense of directories that are totally mysterious on their own
One problem that crops up if you give these kinds of names to folders is “where is this directory”?
Consider Finder’s Go → Recent Folders menu. If I see an entry in it that just says “2”, which of the following is it?
~/Dropbox/Photos/Games/Xenoblade Chronicles/2/ ~/Dropbox/Photos/Games/Zelda/2/ ~/Documents/House/Upgrades/2025 - Sauna installation/Blueprints/Rounds/2
Finder will just say “2”, and leave me to guess. Granted, this is a recent-folders list, so I’m probably not totally hosed, but still.
BBEdit, on the other hand, is fancier than macOS’ Finder, and supplies sometimes-critical context (the downside is that the list is way more cluttered). If I opened the top folder in BBEdit, I’d see this in the history:
2 — 📁 ~/Dropbox/Photos/Games/Xenoblade Chronicles`
Unfortunately, the list in BBEdit is ragged-right, which makes it difficult to scan. I think a better idea is to have something like:
all lined up here ↓
~/Dropbox/Photos/Games/Xenoblade Chronicles/2/Blade combos.JPG
~/Dropbox/Photos/Games/Zelda/2/World map.png
~/Documents/House/Upgrades/2025 - Sauna installation/Blueprints/Rounds/2/Power.pdf
↑
BBEdit can’t do this, but theoretically my OS could.
Sending files that have important information further up the directory hierarchy
Consider some of my images collections.
For example, I have full paths like
~/Dropbox/Photos/Games/Xenoblade Chronicles/3/Bantz/No use for all these imbecilic side characters.jpg
Now, “No use for all these imbecilic side characters.jpg” certainly conveys the sentiment of the image, but there’s a guy in Xenoblade Chronicles 2 who definitely would say this sort of thing. If I wanted to have a single filename that captures all this information (say I’m about to zip up a bunch of similar files and send them to a friend), I’d want the filename to be something like
Xenoblade Chronicles 3, Bantz, No use for all these imbecilic side characters.jpg
In order to make this not-unpleasant, I’d need some kind of “make a copy with user-chosen directory separators” function in the system file manager (the macOS Finder equivalent, or the Windows Explorer equivalent). Above, I’ve chosen “ ” (yes, a space) as the first replacement and “, ” for the second and third.
(Honestly I’d prefer that “Bantz” be removed entirely from the for-sharing filename, but describing that kind of feature in the above paragraph is beyond my abilities at the moment.)
This rename-for-publishing feature would be some semi-buried nerd feature like New Folder With Selection (⌃⌘N) that I enjoy on macOS.
In the system parts of the filesystem
I have fond memories of BeOS’s ultra-terse paths like
SCSI target ID
↓
/dev/disk/0/1/0
↑ ↑
controller partition
I think this looks cooler and is more readable (has more separators) than Solaris’ setups:
/dev/dsk/c0t0d0s0 /dev/dsk/c0t0d1s0 /dev/dsk/c2t5006016A0ABCD123d10s2
(The letters stand for “controller”, “target”, “disk”, and “slice” (“slice” being the same kind of thing as a “partition”. However, in the third example, the target is the target port WWN (World Wide Name — a sort of MAC address for a storage node), and by golly, I could use some slashes around it to help separate it from the rest.)
Home directories
Programs will not add configuration files and/or folders directly to users’ home folders on pain of mocking and social ostracism by all the cool kids.
Because the system lives in a fantasy land where nobody bothers with programs written outside of the system’s ecosystem, peer pressure will actually work.
Instead, there will be direct equivalents of ~/.config/, ~/.local/, ~/.cache/, etc. Maybe even with those exact names. Programs will put their configuration in there, or perhaps in ~/Library. Actually, ~/Library is the cohesive place for all this. The trouble with the modern macOS ~/Library is that there’s a LOT of stuff in it, and the average user can’t really be trusted to muck around in there. Even when I go in there, it’s full of stuff I generally have no interest or business mucking with, and it reminds me of ~/.config/ on a Linux machine (busy), rather than ~/.config/ on my macOS machine (literally everything in there I wrote myself).
…yeah, I think I’d dislike ~/Library/ a lot less if it didn’t have so much crud in there that I don’t care about and have zero desire to manipulate myself unless something goes extraordinarily wrong.
Like, there are four kinds of folders in here:
- Only accessed when doing rocket surgery (~/Libray/Assistant)
- Occasionally or even regularly accessed by nerds directly (~/Library/Application Support/Code/User)
- At least occasionally accessed by power users (~/Library/Fonts)
- Empty directories that hint at what you can do with them but just take up space for most people because most people do nothing with them (~/Library/Screen Savers)
Sandboxing made all this worse, too, at least on macOS, if only because of the duplication. I wonder if there’s a better way.
There are two ways to organize things:
- a program’s configuration in a configuration directory, and its caches in a cache directory. Keeps the cache clutter away from your settings, but your program’s everything isn’t all contained in a neat little directory that you can isolate.
- a program’s everything in one neat little directory. Makes blowing away caches maybe a bit more annoying, and the cache clutter is close by.
Keyboard design
A proper minimal keyboard for this operating system will have:
- ⇧ (Shift)
- ⌃ (Control)
- ⎇ (Alt)
- ⌥ (Option)
- ⌘ (Command)
- 🌐︎ (Globe)
Here’s how they’ll be laid out on a laptop-style keyboard:
⎋ 🔅 🔆 ❓ ❓ ❓ ❓ ⏪ ⏯️ ⏩ 🔇 🔉 🔊` 1 2 3 4 5 6 7 8 9 0 - = ⌫
⇥ Q W E R T Y U I O P [ ] \ ⌃ A S D F G H J K L ; ' ⏎ ⇧ Z X C V B N M , . / ⇧ 🌐︎ ⎇ ⌥ ⌘ ␣ ⌘ ⌥ ←↕︎→
Or maybe an ortholinear keyboard:
⎋ 🔅 🔆 ❓ ❓ ❓ ❓ ⏪ ⏯️ ⏩ 🔇 🔉 🔊` 1 2 3 4 5 6 7 8 9 0 - = ⌫
⇥ Q W E R T U I O P [ ] \ ⌃ A S D F G H J K L ; ' ⏎ ⇧ Z X C V B N M , . / ⇧ 🌐︎ ⎇ ⌥ ⌘ ␣ ⌘ ⌥ ⎇ ←↕︎→
Or maybe something more modern and experimental (read: annoying and maybe not worth the squeeze), like an ortholinear QGMLWB layout:
⎋ 🔅 🔆 ❓ ❓ ❓ ❓ ⏪ ⏯️ ⏩ 🔇 🔉 🔊` 1 2 3 4 5 6 7 8 9 0 - = ⌫
⇥ Q G M L W B Y U V ; [ ] \ ⌃ D S T N R I A E O H ' ⏎ ⇧ Z X C F J K P , . / ⇧ 🌐︎ ⎇ ⌥ ⌘ ␣ ⌘ ⌥ ⎇ ←↕︎→
(I would like to point out that I have never used the QGMLWB layout. However, in _Shift Happens_, Marcin Wichary claims/passes along the claim/points out that it’s supposedly the lowest-effort English-language keyboard layout, beating Workman by a little bit, beating Dvorak by a fair bit, and beating QWERTY by a lot.)
Additionally, one idea is that all pairs of punctuation be put on some layer somewhere, as seen on phones’ on-screen keyboards:
- ()
- []
- {}
- <>
- “”
- ‘’
- «»
- ‹›
- 【】
- 「」
- 『』
- 〝〟
- 《》
- 〈〉
I use less than half of these on a regular basis and I’ve only used about half of these ever, but it’s a start.
Sometimes pairs are different and use different pairings:
- „
More keys may be added to support languages that need it, like, say, Japanese.
(Note to self: this may be one too many.)
(We can never really totally cut off POSIX compatibility because we’ll be SSHing into POSIX systems.)
It will not have a dedicated Caps Lock key.
I don’t know what functions will be on the keys between F2 and F7. Then again, Apple changes these around every so often, so I don’t feel the least bit bad about not knowing what deserves dedicated keyboard buttons in the top middle of the keyboard. Maybe a teeny Touch Bar like MacBooks used to have.
Here’s how the different combinations of keys will shake out:
To generate this list, run the following code:
from itertools import permutations, product from pprint import pprint l = ['⌃', '⇧', '🌐', '⎇', '⌥', '⌘'] everything = set(product(l, repeat=len(l))) globs = [''.join(xs) for xs in everything] globs = [set(glob) for glob in globs] pprint(sorted(list(set([''.join(glob) for glob in globs]))))
- ⇧ — capitalized letters
- ⌃ — cursor movement
- ⌃⇧ — cursor movement with selection
- ⌥ — special characters
- ⌥⇧ — more special characters
- ⌃⌥ — the old VoiceOver key combo
- ⌃⌥⇧ — more of the old VoiceOver key combo?
⎇
⎇⇧
⎇⌃
⎇⌥
⎇⌃⇧
⎇⌥⇧
⎇⌥⌃
⌃⎇⌥
⌃⎇⌥⇧
- ⌘, ⇧⌘, ⌥⌘, ⌥⇧⌘, ⎇⌘, ⎇⇧⌘, ⌃⌘, ⌃⇧⌘, ⌃⌥⌘, ⌃⎇⌘, ⎇⌥⌘, ⌃⌥⇧⌘, ⌃⌥⎇⌘, ⌃⎇⇧⌘, ⌃⎇⌥⌘, ⎇⌥⇧⌘, ⌃⎇⌥⇧⌘ — application-level functions
- 🌐︎, ⇧🌐︎, ⌥🌐︎, ⌥⇧🌐︎, ⎇🌐︎, ⎇⇧🌐︎, ⌃🌐︎, ⌃⇧🌐︎, ⌃⌥⇧🌐︎, ⌃⌥🌐︎, ⌃⎇⇧🌐︎, ⌃⎇⌥⇧🌐︎, ⌃⎇⌥🌐︎, ⌃⎇🌐︎, ⎇⌥🌐︎, ⎇⌥⇧🌐︎ — OS-level functions
- ⌘🌐︎ and anything with this: user-defined
There will be two main nucleus keys:
- ⌘ (Command)
- 🌐︎ (Globe)
There will never be any OS- or application-defined keys that use both of these at the same time. Users, however, may create key combinations that use both at the same time.
At any rate, the canonical written order of keys is:
⌃⎇⌥⇧⌘🌐︎
Spoken aloud, Shift gets moved to the front:
Shift Control Alt Option Command Globe
(Unresolved issues)
(This section is very much a work-in-progress.)
Consider a browser.
It has these very R-ful functions:
- Reload
- Reload, ignoring cache
- Reload with(out) content blockers
- Switch to/from Reader Mode
Clearly, Reload gets ⌘R, but what about the rest?
(Another unresolved issue)
When Alt is part of a Command combo or a Globe combo, it does an application-level or OS-level thing.
What about when it’s pressed by itself, or in combination with other modifiers that are neither Globe nor Command?
Shift
In current OSs, people are used to Shift meaning three things:
- reverse direction (think ⇥ vs. ⇧⇥, or ⌘Z vs. ⇧⌘Z)
- select while moving (think → vs. ⇧→)
- do a totally different thing (⌘A selects all, ⇧⌘A opens the Applications folder)
Command
Command will be the primary key that one uses for in-application keyboard shortcuts, like:
- ⌘X — cut
- ⌘C — copy
- ⌘V — paste
- ⌥⌘V — paste and match style
- ⌘Z — undo
- ⇧⌘Z — redo
- ⌘O — open
- ⌘N — new
- ⌘P — print
- ⌘R — reload
- ⌘D — duplicate cursor
- ⇧⌘D — undo duplicate cursor
- ⌘F — find
- ⌘G — find next
- ⌘[ — back
- ⌘] — forward
- ⌘B — bold
- ⌘I — italic
- ⌘U — underline
- ⌘, — preferences
- ⌘. — stop
There will also be the same keyboard command everywhere for nerdier commands like:
- paste and match style
- move line up/down
- copy line up/down
- delete until end of line
- delete entire line
Globe
Keyboard combinations with Globe will be reserved for OS-primary functions, which includes both window and tab management.
- 🌐︎Q — quit application
- ⇧🌐︎W — close the whole window
- 🌐︎W — close window (or maybe just the tab)
- 🌐︎F — full-screen window
- 🌐︎H — hide application
- 🌐︎M — minimize window
- 🌐︎← and 🌐︎→ — switch to {previous, next} workspace
- 🌐︎1, 🌐︎2, 🌐︎3, …, 🌐︎0, ⎇🌐︎1, ⎇🌐︎2, ⎇🌐︎3, ⎇🌐︎0 — switch to workspace 1–20
- ⌃🌐︎← and ⌃🌐︎→ — move current window to {previous, next} workspace
- ⌃🌐︎1, ⌃🌐︎2, ⌃🌐︎3, …, ⌃🌐︎0, ⌃⎇🌐︎1, ⌃⎇🌐︎2, ⌃⎇🌐︎3, ⌃⎇🌐︎0 — move current window to workspace 1–20
- 🌐︎E — emoji picker
- 🌐︎[ and 🌐︎] — previous/next tab
- ⇧🌐︎[ and ⇧🌐︎] — select (current and) previous/next tab
- 🌐︎J, 🌐︎L, 🌐︎I — snap current window to the left/right/middle half of the screen
- 🌐︎K — something downward-related
- switching function keys’ functions to F1, F2, etc. instead of, say, brightness and volume controls
- changing the current input method
- …maybe something for switching between tab groups? (think different editor splits in VS Code)
Control
The Control key is primarily to turn letter keys into cursor-movement keys.
There are things one might want to modify cursor movement with:
- going further (word-at-a-time instead of letter-at-a-time)
- going even further (sentence-at-a-time)
- going even further than that (line-at-a-time)
- expanding/shrinking selection in both directions (expand to select word, expand to select sentence, expand to select inside punctuation, expand to select line/paragraph, expand to select section, expand to select entire document)
- selecting all the while
- deleting all the while
The primary cursor-movement keys will be:
- I — up
- J — left
- K — down
- L — right
Adding Shift will, of course, expand the selection in that direction.
Unused options:
- UO
- H;
- ESDF (and therefore WR and AG)
- ,. (unpleasant)
- [] (also unpleasant)
(Finding keyboard shortcuts for all these other movement/selections is an unsolved problem.)
It may be a good idea to have some of these keyboard combinations straight-up delete as well, like C-k in emacs or ⇧⌘K in Visual Studio Code on macOS.
Alt
(Not sure what to do with this key yet.)
Option
AFAICT this will mostly be what it does on macOS now.
I’m very tempted to stop doing the European thing and have the following keybindings instead of what Macs have done since 1984:
- ⌥[ — ‘
- ⌥] — ’
- ⌥{ — “
- ⌥} — ”
This means that the most common character, ’, is two keypresses instead of three.
Similarly, « and » can go on adjacent keys instead of being piled on the same key. ‹ and › are currently ⌥⇧3 and ⌥⇧4 on macOS, and that’s fine.
The lack of a Compose key
Adding a compose key in addition to, or instead of, Option sounded like a reasonable idea. However, after studying the Apple Extended layout a bit and seeing what it does with:
- a primary layer (⌥)
- a secondary layer (⌥⇧)
and the ability to place dead keys on either, I think we ought to be able to get almost everything most people would want. The Apple Extended layout is missing a couple useful characters like ≈ (something available as ⌥X on the normal layout since 1984), but it could be shuffled around a bit and still make at least as much sense as the current Apple Extended layout does now.
(Coming: adjustments to the Apple Extended keyboard layout.)
System automation
The OS will support something like Automator/Shortcuts, as well as something like Services.
Workflows will have an easy export/import to/from YAML files for ease of sharing and authorship, both by programmer types and LLMs.
It will not make it a fantastic chore to run selected text through a command-line application or the default language’s equivalent of a five-line Perl script.
The system will also provide a TextExpander-like facility to expand typed text into more/harder-to-type text. This will cover most of what people want out of a Compose key that they can’t get out of a macOS-style Option key.
The windowing system
I have not decideded whether it would be better for windows to be application-centric (like macOS) or window-centric (like everything else).
Like macOS, there will be menu bar at the top. Or maybe the bottom. There will also be a bunch of icons over on the right, and there will be good builtin utilities for managing the sort of clutter that can happen there.
The look and feel
I think I want the OS to have the look and feel of Newton OS 2.1, as seen on the MessagePad 2000 and 2100 (in particular, with 16 shades of gray, including both black and white-xor-green).
It shouldn’t be grayscale itself, mind, but I think there’s undercelebrated design in here, particularly with how the icons look. They’re plain and clear and there’s a very warm, human aspect to them that I like that isn’t well-replicated in any of the other styles at the time (Windows 95/2000 style, Mac OS style, BeOS style, IRIX style, CDE style).
If you’d like to get an idea of what I mean, use your favorite search engine and look at screenshots of NewtonOS 2.1 running on a MessagePad 2000 or 2100. You can also look at older MessagePads (like the 130 and the 120), but those aren’t grayscale at all, so you might miss a little bit of flourish that is closer to what modern displays can do.
I’m mostly thinking that Newton cues would be best for toolbar buttons and smaller icons. The Newton look is too plain for modern Dock icons (on macOS before Tahoe 26, they were made out of super-large bitmapped images that were then shrunk down, and frequently had lots of details that weren’t really visible at normal Dock-icon sizes).
On the other hand, Newton icons have distinct shapes and are stylus-sized, not mouse-pointer-tip-sized, so they’re not teeny little click targets like you might get if you were trying to bring, say, Mac OS 9 into the modern era.
One drawback: I’d have to almost totally think up what windowing would look like. Basically all Newton applications were full-screen, and the ones that weren’t were a fixed size (imagine a small calculator). I’m tempted to have three dots at the top center of the window and put a radial menu there. Although people on touchpads might hate it.
Some aspects of NewtonOS live on to this day (outside of Einstein, the emulator): if you drag something off the Mac OS X / macOS Dock, hold it away for a bit, and then let go to make it disappear, both the puff animation and the sound that goes with it are from NewtonOS.
Roundedness of the UI
As I write this in 2025, a lot of people are talking about a current trend in UI design — namely, the increasing roundedness of UI elements. Some rounding generally looks nicer and more humane than corners one could cut his finger on, but excessive rounding (see iOS and macOS 26) reduces information density because text and icons inside UI elements with large border radiuses need to be kept away from the rounded edges.
The roundedness of macOS Sequoia 15 is probably an upper limit of how much bouba we should tolerate.
While one is tempted to revert to no rounding (like what was commonplace up through the 90s and somewhat beyond), I think this would be a mistake. My ideal OS will have modern font rendering designed for Retina-class displays, and modern fonts on retro (or merely just old) websites with razor-sharp styling look weirdly fuzzy and downright alien on sites that assume you’re reading in crisp, pixel-accurate expertly-hinted 8-point Verdana.
Light/dark mode and theming
The system will support both light and dark modes, as well as an automatic toggle depending on the time of day (how close it is to sunset), as well as how much ambient light there is.
The sunset trigger will be configurable. Usually my Mac switches to dark mode too late (leaving the monitor the brightest thing in my field of vision for tens of minutes before switching over) and switches to light mode too early (sometime around sunrise but well before the screen seems too dark).
It will also support, for those who want them or need them:
- high-contrast mode(s)
- less-motion mode(s)
I have not yet decided how much theming the windowing system will support. This may be disappointing if you’re looking to reimplement Windows’ Hot Dog Stand theme.
Finally, it will support multiple-image wallpaper, suitable for having wallpaper that changes with the time of day and/or whether dark mode is enabled. The image format will be simple, like having a zipfile of multiple images with some metadata in YAML describing when each image should be shown — or maybe all of that can just go in the filenames.
I would also like it to support “cozy animated-GIF backgrounds” (examples forthcoming).
Transparency
The Human Interface Guide (HIG) for Mac OS X 10.0 said that transparent UI elements were for temporary fleeting things like overlays on sheets.
Transparency might have a place in my OS, but I’d like it to have a purpose behind when it’s used (beyond “it looks cool here”).
Currently (as of macOS 15 Sequoia) Quick Look previews are temporary and fleeting, and also transparent.
Pixel density
The windowing system will not support fractional pixel density (150% zoom, etc.). The macOS-style @1x, @2x (and possibly @3x, if it ever comes to that) will be the only game in town.
The mouse pointer
I may end up wanting to have the mouse cursor be like on iPadOS where the default cursor is a transparent circle and has aim assist, with the shape morphing to an I-bar where appropriate.
I’m still on the fence on the general size of click targets and whether they should be made large enough to support tap interaction.
Bundled fonts
The system will use OpenType fonts; I don’t have enough real criticisms of the OpenType format to say “a new format should be made”.
I’m still going back and forth on whether these fonts should be just made available for use on the Web (pretty much made free-as-in-beer) by offering gigantic sums of money to their respective foundries.
Proportional fonts
I’ll probably go with Helvetica Now as the default proportional font.
Tobias Frere-Jones has taste. Something he makes in the Seaford idiom would be a solid addition.
I think Marcin Wichary’s Gorton Perfected would make a good addition to the list of built-in fonts, provided he updates it with condensed variants as seen in the wild.
Monospace fonts
There are a couple neat features worth talking about in monospace fonts:
- Texture healing (making “imimimimimimim” have narrower is and wider ms, as featured in the Monaspace superfamily)
- Different widths (possibly from some kind of ultra-condensed end to possibly extra-wide, like in Berkeley Mono 2.0)
There’re also popular things that I’m not personally a fan of, but can see the appeal of:
- Fancypants ligatures that turn “<=” into “ ≤ ”, etc.
- Powerline symbols and Nerd Fonts (so you can have icons for Git merge status or different filetypes in your terminal)
The input system
The emoji picker will not suggest U+1F9C6 FALAFEL (🧆) when the user types in “meat”.
Bundled desktop applications
A system is not complete without a decent pool of basic applications.
A file manager
I want the file manager to be spatial by default and close parent folders (even though I occasionally like having stuff on the left side of all my Finder windows, which is a hallmark of browser windows).
For a taste of this on a computer you can use right now, get to a Mac and navigate through Finder windows by pressing ⌥⌘↓ to go into a folder and ⌥⌘↑ to back out to the parent folder. Using a mouse? Hold down Option and double-click on folders. Do this on actual files and you’ll open the file and close the enclosing Finder window (which just might be what you want…occasionally).
I think that folders’ layouts should be stored as a per-user setting, not an inside-the-folder setting (like with macOS’ .DS_Store files). This might have unintended consequences, though, that I haven’t thought through.
A Web browser
It will ship with a damn good browser not built on Blink, Gecko, or WebKit (or their companion JavaScript runtimes).
Stop laughing. We’re already in fantasyland.
It will also support Gemini and Gopher.
While we’re at it, the OS will ship with a Transmit-quality scp/sftp app.
A built-in programmer’s editor
It will have something like Panic’s Nova as a Visual Studio Code-tier do-it-all text editor.
Like BBEdit, the editor will be able to edit files inside of zipfiles. Additionally, it will also automatically curl single and double quotes for appropriate file types unless told to not do so on a per-file basis. (This is the kind of thing that extended attributes are good for.)
An ePub viewer
There are lots of books worth reading, and ePub is a tolerable format for reading books in.
Standard Ebooks has many books worth reading.
What’s always bothered me about annotating ebooks is the nonportability of annotations and highlights.
Maybe a (pseudo-)Markdown format like what friends uses (so, Djot) wouldn’t be the worst thing. It’d just be a file stored alongside the ePub, and it’d have highlights, notes, etc. in it. However, the kinds of anchors (loosely speaking) a program would find most stable (ePubs do get updated) aren’t always going to be the ones that are going to make sense for a normie reader who doesn’t really care about the structure of the .xhtml files inside the zipfile.
Or maybe a YAML file with a bunch of documents (separated by ---) describing annotations. That might work too, and you can just have something like `comments: |` and the reader can go to town with all his commentary on a particular passage in a work.
The terminal
There will be a terminal, and a default shell. The shell will be called “conk” (think of the onomatopoeia of getting hit on the head).
Of course, all of this will support UTF-8.
Fair warning: I barely know how terminals and all their features are implemented. I’ve heard of ANSI escape codes and OSC (operating system command) codes, and know about some of the things they do, but I’m not an expert.
The default shell, conk
conk will not aim for sh compatibility. At all. Nevertheless, constructs like && and || may end up being a good idea anyway to not entirely poop all over world+dog’s muscle memory. fish went through a long period of requiring people to do `; and` instead of `&&`, and it only started getting popular and not-annoying when people could just paste most simple bash/zsh lines into fish without having to change the middle parts of them to something weird.
Powershell had the right idea when it came to making formal names — that is, Verb-Noun. Maybe Noun-Verb would have been a better choice, since so many commands these days start with an ur-command, like the following:
fooctl frobnitz --softly --with="big stick"
Powershell also had the right idea when it came to operating on streams of objects instead of plain text all the time.
On the other hand, Powershell commands’ output tends to be unoptimized for the screen space given. That should be fixed somehow.
As an aside, I tend to think that Http-Header case is ugly much like Pascal_Snake case, especially for command lines, but Microsoft might have the winning style here, usability-wise.
Have more than just output and error streams
If you’re used to shells in UNIX-style operating systems, you should be familiar with the difference between the standard output stream and the standard error stream.
What you may not know is that PowerShell has not two, not three, but SEVEN streams as of PowerShell 7.4:
- Success (written to with the Write-Output cmdlet)
- Error
- Warning
- Verbose
- Debug
- Information
- Progress
This is an idea worth copying.
Have something better than manpages viewed with less
Manpages are nice because they’re only one page (that is, linearized by default and tend to not go into large digressions).
Info pages are, theoretically nice…but I’d have to learn some kind of one-off reader for them from the 80s and ain’t nobody got time for that.
On the other hand, if you want to find out how a particular command-line argument works in a manpage, you have to cross your fingers and hope that searching for “-r” isn’t going to flood you with false positives.
For all this, the winning play is probably going to be something like DocBook-in-XML as a source format. I’ve looked at mdoc, and while it’s at least semantic, it’s ugly as sin because of all the mandatory linebreaks:
DocBook-in-XML is probably way less ugly and easier to read while writing, especially with modern tooling (think LSPs and such).
But I want a better viewer than a pager like less. qman is definitely onto something:
Completions
I’m not sure how I want to implement this, but I want proper completions in the shell, like how the best completions work in the fish shell.
I figure that almost all programs ought to be able to generate completions (in a file describing what to run) for themselves. If a program uses a fancy library to handle command-line options, then that library can emit completions for it.
Of course, in fish, some programs basically have small fish programs that work out what’s permissible to type, and will tab-complete not just files in the current directory, but a list of active branches:
I figure that, as a first cut, all programs should have a very strong convention (like how `--help` almost always shows help) of
fooctl generate-completions [--shell-name]
like how a bunch of programs do already. You’d be able to leave off the shell-name command-line flag for conk, the system’s default shell.
Completions, an inferior way
A somewhat worse option is to have to run an initializer every single time you start up a new shell instance, like how kongplete does it, at least how I use it:
Syncthing uses it:
But you have to run its completion installer once per shell instance, which isn’t viable for a gazillion command-line programs:
# put this in your ~/.config/fish/config.fish # to run every time on shell startup # I think the bash/zsh equivalent is # $ source <(syncthing install-completions) source (syncthing install-completions | psub)
On my system, theoretically, Homebrew could run this and generate a syncthing.fish completion and stick it in a system directory somewhere. But that’s not what it’s set up to do, and I want a system where you can just download binaries outside of a package manager and get good completions.
Colors in the terminal
The terminal will be able to display things in whatever color. And when I say “whatever color”, I mean to include colors that are outside the sRGB range, like ones you might specify with OKLCH.
Additionally, control codes to specify colors will be able to specify both light-mode and dark-mode colors. The rationale for this is to be able to spit out terminal output, and later, when the user changes the terminal color scheme from light to dark (or vice versa), the colors used will look right for the new color scheme as opposed to something where all the foreground colors are too close to the background color to really tell what’s what.
Bundled terminal applications
TUIs are totally going to be a thing for a few things.
Terminal-based document viewer
I’ve complained above about how manpages don’t quite measure up to a real web browser, but nobody wants to learn how to read GNU info pages at the command line.
If there were an easy-enough-to-pick-up command-line document viewer (think of lynx or GNU nano) then this would be mostly fixed.
Terminal-based text editor
There will be one terminal-based text editor included with the system. You could describe it as “Visual Studio Code, but implemented in the system programming language with a TUI user interface instead of in TypeScript with an Electron interface”.
It will feature:
- multiple cursors
- LSP support
- a command bar
- extensions
- being able to mostly get away with just a YAML-based config file instead of needing a full-blown programming language like Emacs Lisp
This editor will also take interface cues from Micro, Helix, and…WordStar. Micro is pico/nano on steroids. Helix supports LSPs and multiple cursors and has a decent windowing system for hints and things. WordStar pre-dates almost all common conventions for cursor movement, and therefore has “fresh” ideas. I’d consider something like (modifier) IJKL or ESDF instead of the execrable vi-style HJKL.
A static site generator
It will come with something like Hugo and probably not particularly like Astro.
Unsolved problems
- What about when you want “close window” and “close tab” to be the same kind of thing (web browsers), but sometimes don’t (Excel spreadsheets)? There’s 🌐︎W (close window) and 🌐︎T (presumably close tab), but people like mashing 🌐︎W blindly in whatever app and it usually just does the right thing.
- What about for browser shortcuts added in by web pages?
- What should the VO-key equivalent be? (In macOS by default it’s ⌃⌥ or Caps Lock.)
- Is there anything that the operating system can do to maximize how much it turns the computer into a bicycle for the mind? Or is that entirely totally up to the programs that a user runs on it? Can anything be done besides “just don’t irritate the user”?
- How much space where does one need to grab and move windows by? Recent design has moved away from “pretty much the entire top of the window”. Should we return to this? Or is the new thing better? NewtonOS didn’t have floating windows often, and when it did, there was this teeny hard-to-tap-on hanging hole that you had to drag it around by, and everything was fine enough, mostly.
Exposure to how different things could be
Related thinking
The 𝕏 account for the U.S. Graphics Company shares its author’s concerns, which are fairly similar to mine.
There are other people who have been rethinking operating systems, broadly defined:
The idea graveyard
I’ve had ideas that roughly pertain to an ideal operating system, but don’t quite make the cut. Or they’re too weird. Or too normal. They go in the graveyard.
⏚