AmigaChromeA new chapter for the Amiga
OpenBench · progress against AmigaOS 3.2.3

OpenBench: the Amiga's libraries, rewritten in the open.

OpenBench is an open rewrite of the libraries, devices and resources of AmigaOS 3.2.3, and of the common third-party libraries. It is built so that AmigaChrome and real Amigas can run without closed ROM or disk code.

Each part is written from scratch from the NDK 3.2 headers, the autodocs and side-by-side tests against OS 3.2. Programs see the same calls, the same registers and the same structures as with the originals. The code is MIT licensed. AROS is studied for how things work, never copied. No Kickstart or Hyperion code or bytes are used.

Same calls, new code

Each library keeps its jump table, its library base and its structures, so existing programs open it as before. Behind them is new, tested code.

Tested beside the original

The same calls go through the open library and OS 3.2's own, corner cases included, and every difference is listed. A library is offered to users only when that list is clean.

One body per machine

A real Amiga runs the 68k code. On x86 and ARM64 cores the same C also builds as native code behind the same 68k face, with the same results.

Progress against OS 3.2.3

Every library, device and resource in AmigaOS 3.2.3, with where its rewrite stands. "Done" means merged in full on the main branch. "In progress" means merged in part, or written and in review. The comparison column says whether the rewrite has been run call for call beside OS 3.2's own, and what that showed.

55 libraries, devices and resources of AmigaOS 3.2.3 in the table

  • 39 done: merged in full
  • 9 in progress: 6 merged in part, 3 in review
  • 7 not started
  • 11 compared with OS 3.2 call for call, no differences
  • 8 compared, with differences listed
  • 36 not yet compared on OS 3.2
Every AmigaOS 3.2.3 library, device and resource
NameWhereStatusVersionComparison with OS 3.2
Libraries in the ROM (13)
dos.libraryROMMerged in partD1 and D2 with most of D3: the 162-vector face, packets, locks, files, LoadSeg, processes. Starting handlers (D4), the Shell and the boot module (D5) not written47.100Not yet comparednot compared: DosABITest runs hosted only; no stove build yet; dos.lvo is from memory and unverified
exec.libraryROMMerged in partThe portable cores only (lists, libraries, memory, signals, ports, semaphores, RawDoFmt); the 68k face, boot and scheduler not written47.x (no build yet)Not yet comparedno side-by-side test: ExecABITest not written; qemu only
expansion.libraryROMMergedWith the firmware's AutoConfig47.100No differences1,890 checks, 0 differ: ExpansionABITest ALL CHAIN beside OS 3.2's in lab expansion-a
gadtools.libraryROMMergedOn (DalsinAI/opengadtools moved in). OpenLook themes it with nothing patched47.100Not yet comparednot compared: GadToolsABITest not run on OS 3.2; the stove build stops at the LVO check (OS 3.2's V47 SetDesignFontA and ScaleGadgetRectA are missing)
graphics.libraryROMMerged in partThe OpenGfx core's drawing calls and regions. Not a whole graphics.library: opengpu.library 0.15 (openamigartg) draws through the core, and the rest is OS 3.2'sOpenGfx 1.4 in opengpu.library 0.15Differences listed1 differs (listed: an AreaEnd case in the LAYERS run): GfxCoreABITest at d0f2a46, 3,564 checks; LAYERS, 1,528 checks; RegionABITest at 065a424, 2,708 calls
icon.libraryROMMergedR2 and R3, built as openicon.library beside the system's, not switched on47.5Differences listed6 differ: iconprobe, 9,033 cases; R3 drawing: 288 differences down to none over lab rounds R3-1 to R3-3
intuition.libraryROMMerged in partI1 to I2d: BOOPSI, the image and gadget classes, strgclass, pointerclass, the drawing calls and both looks, as cores. No library shell yet47 (cores)Not yet comparedno side-by-side test: IntuitionProbe runs on OS 3.2 (intuition 47.53) set the classic look and strgclass
keymap.libraryROMMerged47.100Differences listed13 differ (listed: polska's bytes past the answer, which callers never see): KeymapABITest, 3,774 lines
layers.libraryROMMerged47.100Differences listed33 differ (listed: lines OS 3.2 can't repeat itself, read from uninitialised memory): LayersABITest, 795 lines
mathffp.libraryROMMerged47.100Not yet comparednot compared: MathFFPABITest not run; qemu only. The stove build stops at link (__mulsi3, __umodsi3)
mathieeesingbas.libraryROMMergedNative bodies merged47.100No differences731,616 checks, 0 differ: MathIEEEABITest
utility.libraryROMMergedNative bodies merged47.100No differences722 checks, 0 differ: UtilityABITest in lab omc-range
workbench.libraryROMIn reviewOpenamigabench, the design (for the user's approval) and step L1 (the lists) as openwb.library, which hooks nothing. R1 on main is a proxy that passes every call to OS 3.2's own library, not a rewritereports OS 3.2.3's (R1)Differences listed4 differ: WorkbenchABITest beside OS 3.2's with its Workbench running, 114 checks; with no Workbench, 60 checks, none differ
Libraries on disk (19)
68040.librarydiskNot started–Not yet compared
amigaguide.librarydiskMerged47.100No differences272 checks, 0 differ: AmigaGuideABITest beside OS 3.2's in lab smalllibs-a, and swapped in
asl.librarydiskMerged47.100Not yet comparednot compared: AslABITest runs hosted only. The stove build stops on GCC 16's -Werror (a sign compare, a hook cast)
bullet.librarydiskNot started–Not yet compared
commodities.librarydiskMerged47.100Not yet comparednot compared: CommoditiesABITest not run; qemu only. The stove build stops at the LVO check (the NDK's five private slots)
datatypes.librarydiskMerged in partD1: descriptors, recognition, the method tables. Builds only as opendatatypes.library; the object calls and datatypesclass are D247.100No differences656 checks, 0 differ: DatatypesABITest at e513d0a, line by line
diskfont.librarydiskMerged47.100Not yet comparednot compared: DiskFontABITest not run; qemu only. The stove build's LVO check reads the NDK 1.3 fd, and its layout checks fail against NDK 3.2
iffparse.librarydiskMerged47.100Not yet comparednot compared: IFFParseABITest not run; qemu only. The stove build stops on hook casts and NewList
locale.librarydiskMerged in partA named locale gives NULL for now47.101Differences listed187 differ: LocaleABITest, 922 lines
lowlevel.librarydiskIn review47.100No differences109 checks, 0 differ: LowLevelABITest beside OS 3.2's 47.1 in lab rexxll-b, and swapped in
mathieeedoubbas.librarydiskMergedNative bodies merged47.100No differences731,616 checks, 0 differ: MathIEEEABITest, shared with singbas
mathieeedoubtrans.librarydiskMergedNative bodies merged47.100Differences listed1,130 differ (listed: each by one ulp; the README records 1,138 at 2019e1a): MathTransABITest, 111,528 checks
mathieeesingtrans.librarydiskMergedNative bodies merged47.100Differences listed1,130 differ (listed: each by one ulp; the README records 1,138 at 2019e1a): MathTransABITest, 111,528 checks
mathtrans.librarydiskMerged47.100Not yet comparednot compared: MathFFPABITest not run; qemu only. The stove build stops at link
nonvolatile.librarydiskMerged47.100No differences266 checks, 0 differ: NonVolatileABITest beside OS 3.2's in lab smalllibs-a, and swapped in
realtime.librarydiskMerged47.100No differences709 checks, 0 differ: RealTimeABITest beside OS 3.2's in lab smalllibs-a, and swapped in
rexxsupport.librarydiskNot started–Not yet compared
rexxsyslib.librarydiskIn reviewA face over the user's own OS 3.2 library, since the ARexx interpreter lives inside it47.100No differences1,417 checks, 0 differ: RexxSysLibABITest ALL beside OS 3.2's 47.2 in lab rexxll-a; swapped in, 1,331 checks, none differ
version.librarydiskMerged47.100No differences36 checks, 0 differ: VersionABITest beside OS 3.2's in lab smalllibs-a, and swapped in
Devices in the ROM (10)
audio.deviceROMMerged47.100Not yet comparednot compared: the device builds on the stove, but AudioABITest doesn't compile (BeginIO, AbortIO)
carddisk.deviceROM (A600, A1200)Not started–Not yet comparednot compared
console.deviceROMMerged47.100Not yet comparednot compared: ConsoleABITest not run; qemu only. The stove build stops on BPTR
gameport.deviceROMMerged47.100Not yet comparednot compared: GameportABITest not run. The stove build stops at link (__udivsi3)
input.deviceROMMerged50.1 and 50.2, fit for Instance-32 with OS 3.2's own keyboard and gameport devices50.2Not yet comparedno side-by-side test: in labs inputlib-a and inputpasses-a (OS 3.2) every check passes, matching the ROM's input.device where the two can be compared
keyboard.deviceROMMerged47.100Not yet comparednot compared: KeyboardABITest not run. The stove build stops at link (__udivsi3)
ramdrive.deviceROMMerged47.100Not yet comparednot compared: RamdriveABITest not run, nor a real reset. The stove build stops on me_Addr and NewList
scsi.deviceROMNot startedThe Team's acscsi.device is AmigaChrome's own disk device, not a scsi.device rewrite–Not yet comparednot compared
timer.deviceROMMerged47.100Not yet comparednot compared: TimerABITest not run; qemu only. The stove build stops at link
trackdisk.deviceROMMerged47.100Not yet comparednot compared: TrackdiskABITest not run. The stove build stops on NewList
Devices on disk (5)
clipboard.devicediskMerged47.100Not yet comparednot compared: ClipboardABITest not run. The stove build stops on NewList
mfm.devicediskNot started–Not yet comparednot compared
parallel.devicediskMerged47.100Not yet comparednot compared: ParallelABITest not run. The stove build stops on BPTR
printer.devicediskNot started–Not yet comparednot compared
serial.devicediskMerged47.100Not yet comparednot compared: SerialABITest not run. The stove build stops on BPTR
Resources in the ROM (8)
FileSystem.resourceROMMergedThe FileSysEntry list that ACFS and the FFS-compatible handler register in47.100Not yet comparednot compared: as battclock; whether OS 3.2's ROM copy adds the FFS entries itself is to confirm
battclock.resourceROMMergedThe MSM6242B and the RF5C01A. Its two private slots return 0, so it goes with the open battmem47.100Not yet comparednot compared: the ABI test and the C shell are only syntax-checked; no stove build yet
battmem.resourceROMMerged47.100Not yet comparednot compared: as battclock; the bit layout is to confirm on OS 3.2
card.resourceROM (A600, A1200)MergedAll 17 calls. The A600's Gayle is not detected yet47.100Not yet comparednot compared: as battclock; OwnCard with no card is to confirm
cia.resourceROMMergedOne RomTag makes ciaa and ciab47.100Not yet comparednot compared: the ABI test and the C shell are only syntax-checked against stand-in headers; no stove build yet
disk.resourceROMMerged47.100Not yet comparednot compared: as cia. DiskABITest can show false differences if trackdisk.device polls the drive during the run
misc.resourceROMMerged47.100Not yet comparednot compared: as cia
potgo.resourceROMMerged47.100Not yet comparednot compared: as cia

Third-party libraries

Many Amiga programs also open libraries that other authors wrote: archivers and packers (xad, xfd, xpk), zlib, MPEG audio, the ReAction classes and MUI. OpenBench rewrites these too, as clean-room libraries with the same calls. MUI programs run through Zune, from AROS. Each row says whether the rewrite has been compared with the original library yet.

Third-party libraries (10)

Open rewrites of libraries other authors wrote
NameStatusVersionCompared with the original
xadmasterMerged13.2Not yet comparednot compared: Aminet's 13.1 is not on the labs' disk. The stove build stops at the fd check (no xadmaster_lib.fd in the stove)
xfdmasterMerged39.100Not yet comparednot compared: the original is not on the labs' disk, and no xfdmaster_lib.fd is on hand
xpkmasterMerged5.3Not yet comparednot compared: XPK 5.2 is not on the labs' disk. The stove build stops at link
zMerged53.12Not yet comparednot compared: Aminet's 53.11 is not on the labs' disk; the LVO order is unverified. The stove build stops on BPTR
mpegaMergedLayers I, II and III, MPEG-1, 2 and 2.5, fixed point, from the ISO standards2.5Not yet comparednot compared: Aminet's 2.4 is not on the labs' disk, and mpega.lvo is not yet checked against mpega_lib.fd. The stove build stops at link (__divsi3, __udivsi3). Under qemu its output keeps within ISO 11172-4's full-accuracy bounds
reqtoolsMerged38.1500Not yet comparednot compared: ReqTools 2.9 (38.1413) is not on the labs' disk. rtFontRequestA's registers in reqtools.lvo don't match AROS's fd; to confirm against ReqTools' own developer files
ReAction classesMerged in part37 classes, among them layout, window, requester, button, string, chooser, listbrowser, page and texteditor. Not yet: tapedeck.gadget, listview.gadget and boingball.image, which are in Instance-32's SYS:Classes47.100Not yet comparednot compared: no stove build yet; the class shells and ABI tests are only syntax-checked
muimaster, zunemasterMergedA face over Zune (AROS)19Not yet comparednot compared
cybergraphicsMerged–Not yet comparednot compared
bsdsocket (OpenSocket)Merged4.3Not yet comparednot compared

Libraries AmigaChrome adds (6)

The Team's own libraries and devices, with no AmigaOS original
NameStatusVersionCompared with the original
openrtg, opengpu, Warp3D, miniglMergedopengpu.library 0.15, openrtg.library 0.17Not yet comparedno side-by-side test
opentls, opencryptoMergedopentls.library 1.2Not yet comparedno side-by-side test
openinputMerged1.2Not yet comparedno side-by-side test
openmulticoreMerged0.4Not yet comparedno side-by-side test
openextmemMerged–Not yet comparedno side-by-side test
accontrol.device, acscsi.device, acatapi.deviceMergedaccontrol 1.3Not yet comparedno side-by-side test

Read this before the numbers

Merged is not the same as on your Amiga

"Merged" means the code is on the main branch of the Team's repositories and passes its own tests. It does not mean it is on your Amiga.

The open libraries reach an Amiga through OpenUp. From OpenUp 0.8.0, OpenUp's installer offers them as OpenLibs: one switch per library, each off until you tick it. A library is offered only once its call-for-call comparison with OS 3.2's own is clean. Unticking it puts OS 3.2's own library back.

What the comparison means

No differences: every call in the test gave the same answer as OS 3.2's own library. Differences listed: the test ran on OS 3.2 and some answers differ; the table says how many and, where known, why. Some are on purpose, and some are memory that OS 3.2 leaves unset.

Not yet compared: the test is written but has not yet run beside OS 3.2 in a lab, or there is no side-by-side test yet. Many of these were tested only under a 68k emulator against an independent model, which says nothing about OS 3.2.

What is not started

The not-started rows are real gaps, not hidden work. Among them are scsi.device and carddisk.device in the ROM, the printer and mfm devices, and a few disk libraries such as bullet.library. A full open ROM needs them all.

workbench.library's rewrite is in review. What is on the main branch today is a proxy that passes each call to OS 3.2's own.

Where these numbers come from

This page is generated from the Team's status table for the open libraries. Re-running the site's tool rebuilds it from the latest table, so the page is only as current as the table and the date below.

Versions say 47 so that OS 3.2 programs asking for version 47 get them, with revision 100 and up for the open ones.

Generated from the status table in libraries/OPEN_LIBRARIES.md of the Team's amigachrome-guest repository, as it stood on (commit 29085f08).