Roadmap

From ravynOS
Jump to navigation Jump to search

ravynOS High-Level Roadmap[edit | edit source]

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.

Major work areas and technologies[edit | edit source]

Mach subsystem[edit | edit source]

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.

What you can help with:

  • build ports and components with MACH enabled
  • exercise the subsystem and report any issues

WindowServer[edit | edit source]

WindowServer is a ground-up implementation of the desktop UI. It consists of a wayland compositor (waybox) 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 the desktop wallpaper, displaying icons on it, and displaying the menu bar, in addition to actually managing window placement, sizing, etc. Window decorations are implemented in AppKit (client side).

What you can help with:

  • 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 NSPopUpView
  • Find/port and build additional KMS drivers for different GPUs. Highly wanted: NVIDIA, Vmware virtual VGA, QXL

DMG[edit | edit source]

The DMG disk image format is the de-facto way to distribute Mac software. Some open-source implementations of DMG exist, such as dmg2img and darling-dmg using 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.

What you can help with:

  • Anything. This will probably be written from scratch from the existing specs/docs. Start with a library/framework that manipulates the format.

Filer[edit | edit source]

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.

What you can help with:

  • Coding the back-end for GUI operations
  • Get in touch with @ashi on Discord

Mach-O Conversion[edit | edit source]

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.

What you can help with:

  • 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 .dylib extension, etc
  • 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

Swift[edit | edit source]

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.

What you can help with:

  • 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)

Volume Manager[edit | edit source]

The volume manager is responsible for noticing new media (e.g. a USB stick) and mounting it on /Volumes.

What you can help with:

  • Find & adapt or write a suitable automounter and a launchd job plist for it

CLI Tools[edit | edit source]

Many special commands exist on macOS. We have 'open' and 'launchctl' already. A few other key ones we need are:

  • hdiutil
  • defaults
  • diskutil

What you can help with:

  • Write or port any of the above (and any others)
  • Add more commands and XML plist support to launchctl