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.
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.
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.
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
| Name | Where | Status | Version | Comparison with OS 3.2 |
|---|---|---|---|---|
| Libraries in the ROM (13) | ||||
| dos.library | ROM | Merged 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 written | 47.100 | Not yet comparednot compared: DosABITest runs hosted only; no stove build yet; dos.lvo is from memory and unverified |
| exec.library | ROM | Merged in partThe portable cores only (lists, libraries, memory, signals, ports, semaphores, RawDoFmt); the 68k face, boot and scheduler not written | 47.x (no build yet) | Not yet comparedno side-by-side test: ExecABITest not written; qemu only |
| expansion.library | ROM | MergedWith the firmware's AutoConfig | 47.100 | No differences1,890 checks, 0 differ: ExpansionABITest ALL CHAIN beside OS 3.2's in lab expansion-a |
| gadtools.library | ROM | MergedOn (DalsinAI/opengadtools moved in). OpenLook themes it with nothing patched | 47.100 | Not 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.library | ROM | Merged 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's | OpenGfx 1.4 in opengpu.library 0.15 | Differences 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.library | ROM | MergedR2 and R3, built as openicon.library beside the system's, not switched on | 47.5 | Differences listed6 differ: iconprobe, 9,033 cases; R3 drawing: 288 differences down to none over lab rounds R3-1 to R3-3 |
| intuition.library | ROM | Merged in partI1 to I2d: BOOPSI, the image and gadget classes, strgclass, pointerclass, the drawing calls and both looks, as cores. No library shell yet | 47 (cores) | Not yet comparedno side-by-side test: IntuitionProbe runs on OS 3.2 (intuition 47.53) set the classic look and strgclass |
| keymap.library | ROM | Merged | 47.100 | Differences listed13 differ (listed: polska's bytes past the answer, which callers never see): KeymapABITest, 3,774 lines |
| layers.library | ROM | Merged | 47.100 | Differences listed33 differ (listed: lines OS 3.2 can't repeat itself, read from uninitialised memory): LayersABITest, 795 lines |
| mathffp.library | ROM | Merged | 47.100 | Not yet comparednot compared: MathFFPABITest not run; qemu only. The stove build stops at link (__mulsi3, __umodsi3) |
| mathieeesingbas.library | ROM | MergedNative bodies merged | 47.100 | No differences731,616 checks, 0 differ: MathIEEEABITest |
| utility.library | ROM | MergedNative bodies merged | 47.100 | No differences722 checks, 0 differ: UtilityABITest in lab omc-range |
| workbench.library | ROM | In 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 rewrite | reports 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.library | disk | Not started | – | Not yet compared |
| amigaguide.library | disk | Merged | 47.100 | No differences272 checks, 0 differ: AmigaGuideABITest beside OS 3.2's in lab smalllibs-a, and swapped in |
| asl.library | disk | Merged | 47.100 | Not yet comparednot compared: AslABITest runs hosted only. The stove build stops on GCC 16's -Werror (a sign compare, a hook cast) |
| bullet.library | disk | Not started | – | Not yet compared |
| commodities.library | disk | Merged | 47.100 | Not yet comparednot compared: CommoditiesABITest not run; qemu only. The stove build stops at the LVO check (the NDK's five private slots) |
| datatypes.library | disk | Merged in partD1: descriptors, recognition, the method tables. Builds only as opendatatypes.library; the object calls and datatypesclass are D2 | 47.100 | No differences656 checks, 0 differ: DatatypesABITest at e513d0a, line by line |
| diskfont.library | disk | Merged | 47.100 | Not 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.library | disk | Merged | 47.100 | Not yet comparednot compared: IFFParseABITest not run; qemu only. The stove build stops on hook casts and NewList |
| locale.library | disk | Merged in partA named locale gives NULL for now | 47.101 | Differences listed187 differ: LocaleABITest, 922 lines |
| lowlevel.library | disk | In review | 47.100 | No differences109 checks, 0 differ: LowLevelABITest beside OS 3.2's 47.1 in lab rexxll-b, and swapped in |
| mathieeedoubbas.library | disk | MergedNative bodies merged | 47.100 | No differences731,616 checks, 0 differ: MathIEEEABITest, shared with singbas |
| mathieeedoubtrans.library | disk | MergedNative bodies merged | 47.100 | Differences listed1,130 differ (listed: each by one ulp; the README records 1,138 at 2019e1a): MathTransABITest, 111,528 checks |
| mathieeesingtrans.library | disk | MergedNative bodies merged | 47.100 | Differences listed1,130 differ (listed: each by one ulp; the README records 1,138 at 2019e1a): MathTransABITest, 111,528 checks |
| mathtrans.library | disk | Merged | 47.100 | Not yet comparednot compared: MathFFPABITest not run; qemu only. The stove build stops at link |
| nonvolatile.library | disk | Merged | 47.100 | No differences266 checks, 0 differ: NonVolatileABITest beside OS 3.2's in lab smalllibs-a, and swapped in |
| realtime.library | disk | Merged | 47.100 | No differences709 checks, 0 differ: RealTimeABITest beside OS 3.2's in lab smalllibs-a, and swapped in |
| rexxsupport.library | disk | Not started | – | Not yet compared |
| rexxsyslib.library | disk | In reviewA face over the user's own OS 3.2 library, since the ARexx interpreter lives inside it | 47.100 | No 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.library | disk | Merged | 47.100 | No differences36 checks, 0 differ: VersionABITest beside OS 3.2's in lab smalllibs-a, and swapped in |
| Devices in the ROM (10) | ||||
| audio.device | ROM | Merged | 47.100 | Not yet comparednot compared: the device builds on the stove, but AudioABITest doesn't compile (BeginIO, AbortIO) |
| carddisk.device | ROM (A600, A1200) | Not started | – | Not yet comparednot compared |
| console.device | ROM | Merged | 47.100 | Not yet comparednot compared: ConsoleABITest not run; qemu only. The stove build stops on BPTR |
| gameport.device | ROM | Merged | 47.100 | Not yet comparednot compared: GameportABITest not run. The stove build stops at link (__udivsi3) |
| input.device | ROM | Merged50.1 and 50.2, fit for Instance-32 with OS 3.2's own keyboard and gameport devices | 50.2 | Not 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.device | ROM | Merged | 47.100 | Not yet comparednot compared: KeyboardABITest not run. The stove build stops at link (__udivsi3) |
| ramdrive.device | ROM | Merged | 47.100 | Not yet comparednot compared: RamdriveABITest not run, nor a real reset. The stove build stops on me_Addr and NewList |
| scsi.device | ROM | Not startedThe Team's acscsi.device is AmigaChrome's own disk device, not a scsi.device rewrite | – | Not yet comparednot compared |
| timer.device | ROM | Merged | 47.100 | Not yet comparednot compared: TimerABITest not run; qemu only. The stove build stops at link |
| trackdisk.device | ROM | Merged | 47.100 | Not yet comparednot compared: TrackdiskABITest not run. The stove build stops on NewList |
| Devices on disk (5) | ||||
| clipboard.device | disk | Merged | 47.100 | Not yet comparednot compared: ClipboardABITest not run. The stove build stops on NewList |
| mfm.device | disk | Not started | – | Not yet comparednot compared |
| parallel.device | disk | Merged | 47.100 | Not yet comparednot compared: ParallelABITest not run. The stove build stops on BPTR |
| printer.device | disk | Not started | – | Not yet comparednot compared |
| serial.device | disk | Merged | 47.100 | Not yet comparednot compared: SerialABITest not run. The stove build stops on BPTR |
| Resources in the ROM (8) | ||||
| FileSystem.resource | ROM | MergedThe FileSysEntry list that ACFS and the FFS-compatible handler register in | 47.100 | Not yet comparednot compared: as battclock; whether OS 3.2's ROM copy adds the FFS entries itself is to confirm |
| battclock.resource | ROM | MergedThe MSM6242B and the RF5C01A. Its two private slots return 0, so it goes with the open battmem | 47.100 | Not yet comparednot compared: the ABI test and the C shell are only syntax-checked; no stove build yet |
| battmem.resource | ROM | Merged | 47.100 | Not yet comparednot compared: as battclock; the bit layout is to confirm on OS 3.2 |
| card.resource | ROM (A600, A1200) | MergedAll 17 calls. The A600's Gayle is not detected yet | 47.100 | Not yet comparednot compared: as battclock; OwnCard with no card is to confirm |
| cia.resource | ROM | MergedOne RomTag makes ciaa and ciab | 47.100 | Not yet comparednot compared: the ABI test and the C shell are only syntax-checked against stand-in headers; no stove build yet |
| disk.resource | ROM | Merged | 47.100 | Not yet comparednot compared: as cia. DiskABITest can show false differences if trackdisk.device polls the drive during the run |
| misc.resource | ROM | Merged | 47.100 | Not yet comparednot compared: as cia |
| potgo.resource | ROM | Merged | 47.100 | Not 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)
| Name | Status | Version | Compared with the original |
|---|---|---|---|
| xadmaster | Merged | 13.2 | Not 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) |
| xfdmaster | Merged | 39.100 | Not yet comparednot compared: the original is not on the labs' disk, and no xfdmaster_lib.fd is on hand |
| xpkmaster | Merged | 5.3 | Not yet comparednot compared: XPK 5.2 is not on the labs' disk. The stove build stops at link |
| z | Merged | 53.12 | Not yet comparednot compared: Aminet's 53.11 is not on the labs' disk; the LVO order is unverified. The stove build stops on BPTR |
| mpega | MergedLayers I, II and III, MPEG-1, 2 and 2.5, fixed point, from the ISO standards | 2.5 | Not 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 |
| reqtools | Merged | 38.1500 | Not 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 classes | Merged 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:Classes | 47.100 | Not yet comparednot compared: no stove build yet; the class shells and ABI tests are only syntax-checked |
| muimaster, zunemaster | MergedA face over Zune (AROS) | 19 | Not yet comparednot compared |
| cybergraphics | Merged | – | Not yet comparednot compared |
| bsdsocket (OpenSocket) | Merged | 4.3 | Not yet comparednot compared |
Libraries AmigaChrome adds (6)
| Name | Status | Version | Compared with the original |
|---|---|---|---|
| openrtg, opengpu, Warp3D, minigl | Merged | opengpu.library 0.15, openrtg.library 0.17 | Not yet comparedno side-by-side test |
| opentls, opencrypto | Merged | opentls.library 1.2 | Not yet comparedno side-by-side test |
| openinput | Merged | 1.2 | Not yet comparedno side-by-side test |
| openmulticore | Merged | 0.4 | Not yet comparedno side-by-side test |
| openextmem | Merged | – | Not yet comparedno side-by-side test |
| accontrol.device, acscsi.device, acatapi.device | Merged | accontrol 1.3 | Not 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).