{"id":51033909,"url":"https://github.com/derfsss/java-os4","last_synced_at":"2026-06-22T03:30:30.455Z","repository":{"id":364881631,"uuid":"1264414151","full_name":"derfsss/java-os4","owner":"derfsss","description":"Beta: Java 8 for AmigaOS 4 (PowerPC) - JamVM 2.0 + OpenJDK 8 on clib4, with a native AWT/Swing toolkit","archived":false,"fork":false,"pushed_at":"2026-06-14T22:40:52.000Z","size":4302,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-15T00:15:06.724Z","etag":null,"topics":["amiga","amigaos4","awt","clib4","jamvm","java","java8","jvm","openjdk","powerpc","retrocomputing","swing"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/derfsss.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-09T21:33:43.000Z","updated_at":"2026-06-14T22:40:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/derfsss/java-os4","commit_stats":null,"previous_names":["derfsss/java-os4"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/derfsss/java-os4","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/derfsss%2Fjava-os4","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/derfsss%2Fjava-os4/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/derfsss%2Fjava-os4/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/derfsss%2Fjava-os4/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/derfsss","download_url":"https://codeload.github.com/derfsss/java-os4/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/derfsss%2Fjava-os4/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34633796,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-22T02:00:06.391Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["amiga","amigaos4","awt","clib4","jamvm","java","java8","jvm","openjdk","powerpc","retrocomputing","swing"],"created_at":"2026-06-22T03:30:29.869Z","updated_at":"2026-06-22T03:30:30.445Z","avatar_url":"https://github.com/derfsss.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Java-OS4\n\n![status: beta](https://img.shields.io/badge/status-beta-orange)\n![version: 0.5.1](https://img.shields.io/badge/version-0.5.1-blue)\n![license: GPL-2.0](https://img.shields.io/badge/license-GPL--2.0-green)\n\n**A Java 8 runtime for AmigaOS 4 (PowerPC) — JamVM 2.0 + the OpenJDK 8 class\nlibrary, with a native AWT/Swing toolkit so Java GUIs run in Workbench windows.**\n\n\u003e **Beta.** Java-OS4 runs real headless and Swing applications, but it is still\n\u003e under active development — expect rough edges, gaps, and changes between\n\u003e releases. Bug reports and feedback are welcome.\n\n![Swing app running on AmigaOS 4](docs/m4-swingapp.png)\n\nJava-OS4 brings a real, modern-enough Java to 32-bit big-endian PowerPC\nAmigaOS 4: it runs ordinary Java 8 `.jar` files — collections, streams and\nlambdas, NIO, reflection, serialization — and renders Swing user interfaces\nthrough Intuition and `graphics.library`. It is built by **reviving and\nextending the [JAmiga](#acknowledgements) prior art** rather than starting from\nscratch.\n\n---\n\n## Status\n\n| Phase | Scope | State |\n|------:|-------|-------|\n| 0 | Vendor sources + cross-build environment | ✅ Done |\n| 1 | JamVM engine bring-up (Hello World) | ✅ Done |\n| 2 | OpenJDK 8 class library integration (`java -version`, headless) | ✅ Done |\n| 3 | Headless conformance — io/nio/util/text/zip/reflection, threads + GC | ✅ Done (48/48 tests) |\n| 4 | AWT/Swing GUI — Intuition windows, Java2D, real input, dialogs | ✅ Done |\n| 5 | Packaging, polish, performance | 🚧 In progress (first release: **0.5.0**) |\n\nThe current release runs headless Java 8 programs and Swing applications\n(windows, widgets, mouse, keyboard, resize, modal dialogs) in Workbench\nwindows. See [`docs/`](docs/) for screenshots of each milestone.\n\n## Features\n\n- **Engine:** JamVM 2.0 — an inline-threaded / stack-caching interpreter,\n  retargeted to AmigaOS 4 PowerPC.\n- **Class library:** the full OpenJDK 8 runtime (`rt.jar` and friends), so real\n  Java 8 application compatibility — not a subset.\n- **C runtime:** [clib4](#acknowledgements) (pthreads, `mmap`, `dlopen`).\n- **GUI:** a [Caciocavallo](https://en.wikipedia.org/wiki/Caciocavallo)-style\n  AWT toolkit (`sun.awt.amiga`) — only top-level windows get native peers\n  (Intuition windows backed by an ARGB framebuffer blitted with\n  `graphics.library`); every widget inside is a Swing lightweight painted by\n  Java2D. Fonts via FreeType.\n- **Zero-flag GUI launch:** `java -cp app.jar Main` starts a Swing app with no\n  special options — the Amiga toolkit is the platform default.\n\n## Quick start\n\nA packaged release is an `.lha` containing a `Java-OS4` installer drawer.\n**Download the latest from the\n[Releases page](https://github.com/derfsss/java-os4/releases)**, or build it from\nsource (see [Building from source](#building-from-source) below).\n\n**Requirements:**\n\n- **AmigaOS 4** (PowerPC). Swing/AWT GUIs additionally need **`graphics.library`\n  V52+** and `intuition.library` (standard on current AmigaOS 4); headless\n  programs do not.\n- **`clib4.library` 2.1 or newer** in `LIBS:` — the C runtime the VM depends on.\n  The installer copies the bundled copy there if it is missing (get the latest\n  from [clib4](https://github.com/AmigaLabs/clib4) to update it).\n- The installer runs under **`Sys:Utilities/Installation Utility`** (AmigaOS 4.1).\n\n1. Unpack it anywhere on your AmigaOS 4 machine.\n2. Double-click the **Java-OS4** drawer icon to launch the installer (it runs\n   under `Sys:Utilities/Installation Utility`). The wizard asks where to install\n   the runtime, copies it there, adds a permanent `JAVA:` assign to\n   `S:User-Startup` (live immediately, no reboot needed), and copies the `java`\n   launcher to `C:` so it runs from any Shell.\n3. Run programs from a Shell — the release bundles runnable examples:\n\n   ```\n   java -version\n   java -cp examples/HelloJava.jar HelloJava   ; headless demo\n   java -cp examples/SwingDemo.jar  SwingDemo   ; Swing demo\n   java -cp examples/testsuite.zip  VmSuite     ; self-test\n   ```\n\n   Swing/AWT applications need no extra flags. Application classpath entries are\n   resolved from the `JAVA:` drawer; reference jars elsewhere by absolute path.\n\n\u003e `javac` is not included — compile on a host JDK 8 (use **`javac --release 8`**)\n\u003e and copy the `.jar` over. Bytecode newer than Java 8 is rejected up front with\n\u003e `UnsupportedClassVersionError` rather than failing mysteriously at run time.\n\n## Building from source\n\nThe toolchain runs in a Docker image — the AmigaOS 4 PowerPC cross compiler plus\na host JDK 8 — driven by the `Makefile`:\n\n```sh\ngit submodule update --init     # check out the clib4/ submodule (or clone --recursive)\nmake vendor                     # fetch the JamVM + IcedTea 8 upstream sources, once\nmake image                      # build the cross-build image (pulls the public\n                                #   walkero/amigagccondocker base), once\nmake build                      # clib4 + VM + native libraries + AWT toolkit\nmake dist                       # assemble the install tree + the .lha release\n                                #   -\u003e build/JavaOS4-\u003cver\u003e.lha\n```\n\n`make release` does `build` then `dist` in one step; `make help` lists every\ntarget. The clib4 C runtime is the in-repo **`clib4/` git submodule**\n(`AmigaLabs/clib4`, `development`), built by `make clib4` automatically. The\nlarger JamVM + OpenJDK 8 (IcedTea) upstream trees are public but not committed\nhere — `make vendor` fetches them (see\n[docs/BUILDING.md](docs/BUILDING.md) for the full source-acquisition flow). No\nexternal paths are needed.\n\nFull instructions, the build-script order, and how to run on QEMU or hardware\nare in **[docs/BUILDING.md](docs/BUILDING.md)**.\n\n## How it works\n\n```\n        Java apps (.class/.jar)  +  Swing\n                          |\n        OpenJDK 8 class library (rt.jar) + native libs\n                          |\n   AWT toolkit: sun.awt.amiga peers -\u003e Intuition + graphics.library V52+\n                          |\n        JamVM 2.0  (libjvm.so: interpreter + GC + JNI)\n                          |\n   os/amiga glue: pthreads, dll loading, exception proxy, callNative\n                          |\n        clib4  on  AmigaOS 4 exec/dos/intuition/graphics  (PPC32 BE)\n```\n\nThe key engineering work (cooperative GC safepoints, the Amiga path model, native\nsymbol resolution via clib4's shared-library model, the AWT peer design) lives in\nthe `src/` tree; build and run instructions are in\n[`docs/BUILDING.md`](docs/BUILDING.md).\n\n## Repository layout\n\n```\nsrc/amigaawt/     the sun.awt.amiga AWT toolkit (Java peers + JNI)\nsrc/niopatch/     NIO.2 provider patch for the Amiga path model\nsrc/fontconfig/   minimal fontconfig.properties for the font pipeline\nsrc/tools/        small native helpers (e.g. an input injector for GUI tests)\ntests/            self-verifying conformance + GUI test programs\ntools/            Docker image + build/package scripts\ndocs/             notes, screenshots, and the JamVM vendor patch\n```\n\nThe upstream JamVM / OpenJDK trees are not committed here; the AmigaOS 4 changes\nto JamVM are carried as a patch at\n[`docs/jamvm-amiga-openjdk.patch`](docs/jamvm-amiga-openjdk.patch).\n\n## Acknowledgements\n\nJava-OS4 stands on a great deal of prior work, with gratitude:\n\n- **[JAmiga](https://github.com/jaokim/jamiga)** by **jaokim** — the\n  Java-on-Amiga effort this project revives and extends. The AmigaOS 4 JamVM\n  port and the IcedTea 8 build harness are the foundation we built on.\n- **[JamVM](https://jamvm.sourceforge.net/)** by **Robert Lougher** — the\n  compact, fast Java virtual machine at the core. (GPLv2)\n- **[OpenJDK](https://openjdk.org/)** and **[IcedTea](https://icedtea.classpath.org/)**\n  — the Java 8 class library and build tooling. (GPLv2 with Classpath Exception)\n  The class-library bytecode used at runtime comes from\n  **[Eclipse Temurin](https://adoptium.net/) 8**.\n- **[clib4](https://github.com/AmigaLabs/clib4)** — the modern AmigaOS 4 C\n  runtime (pthreads, `mmap`, `dlopen`) this build targets.\n- **[GNU Classpath](https://www.gnu.org/software/classpath/)** — used as the\n  engine bring-up stepping stone in Phase 1. (GPLv2 with Classpath Exception)\n- **AmigaOS 4** and its SDK — `intuition.library`, `graphics.library` V52+,\n  `keymap.library`, and the PowerPC toolchain.\n- The **OpenJDK Caciocavallo** project, whose peer-toolkit design informs the\n  `sun.awt.amiga` approach.\n\n## License\n\nJava-OS4 is distributed under the **GNU General Public License, version 2** —\nsee [LICENSE](LICENSE). This matches JamVM (GPLv2); the OpenJDK-derived parts\ncarry the GPLv2 **Classpath Exception**. Original source in this repository\n(`src/`, `tools/`, `tests/`) is GPLv2-compatible; the AWT toolkit and other\nclass-library-adjacent code additionally grant the Classpath Exception, as noted\nin their file headers.\n\nWhen redistributing a built release you are combining GPLv2 (JamVM) and\nGPLv2-with-Classpath-Exception (OpenJDK) components; the result is governed by\nthe GPLv2.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fderfsss%2Fjava-os4","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fderfsss%2Fjava-os4","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fderfsss%2Fjava-os4/lists"}