Conceptually, we are building an OS that exports the macOS APIs to developers/apps and looks and feels similar. Initially, we built large parts of the system with FreeBSD, X11/KDE, and DBus. For example, DBus was used to communicate NSMenus to the global menu bar using the dbus-menu protocol. SQLite is used to implement the LaunchServices database. Some desktop components were implemented with Qt and Plasma. This unfortunately fell short of my design goals and has been abandoned.
The new/current approach is to write much more of the core system using the same or similar technology as macOS itself. The entire X11/KDE UI system was dropped. Mach, XPC, and Dispatch were added. A new UI is in development. I plan to move everything to use Mach-O and use the real dyld linker.
The end result will be something that behaves and looks very close to a Mac computer that can build & run applications written for macOS. Not every feature will be implemented, but the goal is to have enough that some typical applications will work.
Below are some of the larger areas we need implemented before higher layers can be done.
The Mach subsystem is a FreeBSD kernel module and userspace library that implement a good chunk of CMU Mach as found in Darwin's xnu kernel. This is largely implemented as of 0.4.0pre1, and we are starting to build ports with their
if __MACH__ code enabled. However there are still big pieces missing, such as Named Entires (opens in a new tab)
- Build ports & components with MACH enabled
- Excersise the subsystem and report any issues you find
- Implement any missing pieces in the kernel and
WindowServer is a ground-up implementation of the desktop UI. It consists of a wayland compositor (based on
wlroots) and a desktop shell written in Objective-C using AppKit components. Rendering uses
OpenGL ES 2.0 and
EGL to display directly on the compositor's DRM/KMS back end. Our WindowServer is responsible for managing displays (outputs), layout, window placement, sizing, etc. Window decorations are implemented in AppKit (client side).
Magma is our version of a desktop environment. It consists of the menu bar (
SystemUIServer, part of
WindowServer) as well as the Dock and Filer components and UI controls. Dock manages the system wallpaper, and Filer is responsible for putting icons on the desktop. UI controls are implemented primarily in
- Writing Menu Extras interface and components like volume, displays, notifications, etc
- Creating the System Preferences application and a loader for preference pane bundles
- Implementing missing pieces of AppKit (target is macOS 10.15)
- Modernizing the look & feel of AppKit components (target is macOS 10.15-ish)
- Get mouse tracking to work again with
- Find/port and build additional KMS drivers for different GPUs. Highly wanted: NVIDIA, Vmware virtual VGA, QXL
The DMG disk image format is the de-facto way to distribute Mac software. Some open-source implementations of DMG exist, such as
FUSE. However, we need a solution that supports reading and writing images and is not under the GPL. It also needs to mount the image on
/Volumes with an appropriate name.
You can help with anything. This will be more than likely written from scratch with the existing specs/docs. You should start with a library/framework that manipulates the format.
The equivalent of the Mac Finder and our file manager. Previous incarnations of the system used "Filer" from helloSystem with some additions/changes. We no longer use this since it is based on X11/Qt, and a new app based on pure Cocoa (AppKit, Foundation) is needed.
- Coding the back-end for GUI operations
- Get in touch with @ashi on Discord
FreeBSD is based on
ELF (Executable and Loading Format), like many Unix systems. MacOS uses the
Mach-O (Mach Object) format developed for CMU Mach, with many extensions by Apple. We need to port FreeBSD libraries and executables to build as Mach-O so they can be used against Mac executables by the run-time linker
dyld. (This is a key to binary compatibility.) It will also allow us to use the same tools and commands (such as
dsymutil) as macOS, giving better source-level compatibility when building apps in their Mac configurations.
We will leave the FreeBSD kernel and kernel modules as ELF.
- Remove ELF assumptions from libc and other essential pieces, and build them as Mach-O dylibs
- Update Makefiles and build scripts to target Mach-O, use the
- Import relevant tools and bits from LLVM and Apple open-source repos, such as dsymutil, otool, lipo...
- Work on dyld
- Write a Mach-O image activator for the kernel
Most Mac programming these days is in Swift. There is some preliminary support for FreeBSD and full support for the core pieces on Linux. We can probably get the FreeBSD build working without too much effort to start, but what we really want is to build the Darwin version.
- Patch up the FreeBSD build of Swift and get it working
- Figure out the delta to get it building with the Darwin Configuration
- Write a SwiftUI using AppKit (or better yet, write UIKit at the same time)
Many special commands exist on macOS. We have
A few other key ones we need are:
- Writing or porting any of the above (and others)
- Adding more commands and XML Plist support to launchctl