jsmp

jsmp

@jsmp.bsky.social

A secret C practitioner, FreeBSD aficionado, cloud admirer (the real ones), and artist wannabe.

16 followers71 following35 posts

Early days for a native IDE. Leveraging clangd for language intelligence (LSP) and mk for building projects. Still a work in progress, but already building and running Petal applications, both on Aster and macOS.

Aster is finally resembling my original vision: retro visuals inspired by QNX, OpenBSD’s security philosophy, and ideas from XNU’s IPC and capability model. Beneath the surface: code signing, developer identities, and decentralized endorsements that can authorize application capabilities.

Built mk, Aster’s native, Plan 9-inspired alternative to make! 😁 It supports dependency graphs, incremental builds, parallel jobs, and loading default build rules and recipes.

Aster’s new visuals are thanks in part to Glass. It can now edit window chrome and preview it. Bloom can render vector-based decorations, including shadows, into optimized 9-part images. This makes it easier to design and test new window styles on macOS before bringing them into Aster.

A major milestone this last weekend for my hobby os 😁. aster can now compile and run a C programs entirely on-system (using a port of llvm/clang), and take it a step further by building a C++ UI application using Petal, Aster’s native UI toolkit.

Most companies using AI today are paying the same agent to build their “innovative” products. They ship similar products with similar bad taste and flaws. The code was never the painful part it was deferring it and thinking on what is worth building. AI reduced the cost of bad ideas.

“Can we get a vector editor?” “We have one at home.” The vector editor at home: editing its own icons. Glass Edit is built with Aster’s UI toolkit and also runs on macOS. Here it’s editing Aster’s vector icons and cursors.

Petal, Aster’s new C++ widget library and application framework. The demo app showcases some of its basic widgets and features (which also means Aster now supports C++ 😅)

Added a few minor improvements to the UI widgets, as well as to the workspace itself, including multi-user session management with login, logout, and shutdown. A sessiond process owns and manages each session and its associated resources. There was also some work on SMP support along the way.

You do not need to replace your whole libc. LLVM libc exposes individual CMake entrypoints, letting you build an archive with strings, memory, math, and similar routines while keeping your OS syscalls, files, processes, `errno`, startup, and other OS code. Just avoid duplicate symbols.

Tried porting Clang to Aster. Turns out C++ has an impressive talent for documenting everything my OS doesn’t implement yet. I’ll tell you all about it… later this decade. 😅

Clang provides libc++, libc++abi, compiler-rt and libunwind, but they build on your libc. That meant improving Aster libc while implementing locales, wchar, signals, TLS, threads, mmap(), dlopen(), and the POSIX foundation they expect.

It feels less like porting Clang and more like porting Aster. Rebuilding Aster, its userland, images, and smoke tests takes under a minute. Rebuilding Clang takes about an hour, so every missing API or bug stretches the feedback loop dramatically.

For me, the menu bar as a UX is incredible for discovering what an app can do. That's why DOS Edit was so approachable. For Aster Terminal Editor, ESC toggles a similar menu bar, with mouse support (works on macOS too).

Went to draft an article using raise (a SSG written in C), and had forgotten it can display a QR code for opening the served pages on my iPhone. It brought back the struggle of getting the QR code rendering right, which I'd completely forgotten. Unfortunately, also how ugly that particular code is.

Don't mind scanning it, it just points to a local network IP address (in this case http://192.168.1.204:9090.. which in your case might be your printer for all I know 🙈).

jsmp reposted

Here's an easter egg in the new Lego Batman that I think all of you will REALLY appreciate. It's so good, I had to make a video.

One nice aspect of building a POSIX-oriented operating system is that many of its components can stand on their own. psh, Aster's shell, builds and runs on macOS, making it easy to iterate on new features and continuously refine the user experience.

Most of my C development still happens in Xcode (thanks to cmake -G Xcode). As a result, many of Aster's GUI applications also run on the macOS host through a thin SDL2 backend while continuing to use Aster's graphics and UI libraries.

You often hear people talk about how they used X to build Y, how great or painful X was, and how it changed the way they think. How often do you hear that nowadays with AI? Most people don't even know which algorithms are being used or what their limitations are until they run into one.

It was discovering OOP, async, graph theory, CAP, eventual consistency, Paxos/Raft, CRDTs, idempotency, immutability, MVCC, cache invalidation, B-trees, Bloom filters, Merkle trees, consistent hashing, and Big O that made me love programming.

Aster’s terminal app (term) now has much better xterm compatibility and proper PTY handling across the system (gettty, PTYs, and major libc support). Also landed an early workspace/window compositor layer. #osdev #toyOS

Another addition is a shared --fmt= output layer through a new libfmt, enabling CLI tools to expose structured output modes such as JSON. The library focuses on human-readable terminal output first, while also making data easy to export and consume. #aster #osdev

fmt is becoming one of my favorite features in psh. psh, Aster’s default shell, treats command output as data. With fmt, tools can expose structured output that scripts can safely consume as maps and lists, without fragile text parsing.

Aster’s terminal app (term) now has much better xterm compatibility and proper PTY handling across the system (gettty, PTYs, and major libc support). Also landed an early workspace/window compositor layer. #osdev #toyOS

Another addition is a shared --fmt= output layer through a new libfmt, enabling CLI tools to expose structured output modes such as JSON. The library focuses on human-readable terminal output first, while also making data easy to export and consume. #aster #osdev

Back to Aster (my toy OS), a raw binary bootloader with minimal FAT support now loads an ELF64 kernel (no GRUB). The kernel executes ELF64 binaries and includes an early shared library loader (for libc and libcore).

elfdump on Aster showing symbols from libc and libcore. Inspired by BeOS: threads as the execution unit, “teams” as process containers, libc exposing a POSIX-like interface. The terminal is a graphical app (bitmap font: spleen, mouse + scrollbar) rendering a full-screen TTY.

The ideia that a machine had no pleasure in creating an artwork to me is pale in contrast to the fact that a human did not spent years honing the skills needed to understand and express oneself. A style is not only a perspective but also the sum of creative ways to deal with our own limitations.

You are up to date.