Engineering blog · the desktop

No more minimum viable: the EuroOS apps grow up.

The bluntest feedback we received this summer came from our own founder: everything you build is MVP quality, and then it has to be rebuilt to get good. He was right. So we went back through the desktop with one rule: build each application to the level where you would actually use it, or do not ship it at all. This post is the tour of what that produced, from a real painting app to per-file versioning in the file manager, and how each claim was verified.

EuroPaint: a painting app, not a pixel toy

The old paint demo had twelve fixed colors. The rewritten EuroPaint has a full HSV color picker with saturation and value plane, hue strip and precise swatches, nine real tools (pencil, brush with size, line, rectangle, ellipse, filled variants, flood fill and an eraser), and a proper undo and redo stack. Every tool draws through the same software rasterizer the compositor uses, so what you paint is exactly what the desktop shows.

EuroView and a JPEG decoder of our own

The image viewer, EuroView, now browses a folder, zooms, and rotates. The bigger story is underneath: EuroOS previously decoded PNG, BMP, QOI and PPM with its own code, but JPEG, the format most photographs actually use, was missing. The euromedia crate now contains a from-scratch baseline JPEG decoder: Huffman decoding, dequantization, the 8x8 inverse DCT, restart markers, and YCbCr conversion for 4:4:4, 4:2:2 and 4:2:0 chroma layouts with proper upsampling. It is truth-tested pixel by pixel against a reference decoder on real photographs. No library was imported; that is the point of this project.

EuroNotes: rich text on a from-scratch text stack

EuroNotes grew from a plain-text pad into a note keeper with bold and italic styling, search across notes, and note management. Styled text sounds trivial until you remember there is no font engine to lean on here: the styling is drawn by our own text renderer, which synthesizes the weights and slants at draw time. The editing core (cursor, selection, buffer) was factored out and is now shared by every text-editing surface on the desktop, so a fix in one editor fixes them all.

EuroFiles: metadata, protection, and a history for every file

The file manager finally answers the questions a file manager exists for: how big, changed when, and which version. Behind that sits the largest piece of this sprint, in the filesystem itself:

Permissions that are enforced

Read, write and execute bits are enforced in the kernel VFS for every process, with chmod to change them from the shell and the file manager. Before, permissions were displayed; now they are law.

Immutability and signed integrity

System files can be marked immutable, and the integrity service verifies them against the signed kernel image on a schedule. Deleting or editing a protected file is refused with a reason, not a shrug.

Per-file versioning

Files and folders can opt into version history. Saving keeps the previous version; the file manager shows the history and restores any of them. This is a filesystem feature, so every application inherits it without changing a line.

Search, everywhere

EuroOS now has a system-wide search: one keystroke opens it, and it finds applications, files by name, and file contents, ranked and live as you type. It is built on the same indexing the file manager uses, so results stay consistent with what the filesystem actually contains.

And the calculator got serious

EuroReken went from four operations to a scientific calculator: trigonometry, logarithms, powers and roots, parentheses and a proper expression parser, because a calculator that cannot compute sin(0.5)^2 is a demo, not a tool.

The rule that shaped this sprint: a feature ships when it is finished, labeled honestly, and verified by running it, never because a checkbox needed ticking. The same discipline that carried DOOM and Chromium applies to a color picker.

Honest footnotes, as always

  • Everything above is native EuroOS code drawing through the EuroOS compositor. No toolkit, no font engine, no image library was imported.
  • Each feature landed with self-tests in the boot sequence and host-side unit tests; the suite stands at over a thousand tests and is green on every published image.
  • The JPEG decoder is baseline JPEG. Progressive JPEG decoding is not implemented yet and files using it are reported as unsupported rather than mis-rendered.
  • Versioning and protection are per-file opt-in features of the EuroOS filesystem; foreign filesystems (FAT, ext, NTFS) mount as before, without them.
Chromium goes multi-process Try EuroOS in your browser