Reproducible Symbolics Genera 8.5 bitmap font recovery and Unicode release pipeline
  • Python 83.2%
  • Shell 13.6%
  • Scheme 1.2%
  • Makefile 1%
  • Nix 1%
Find a file
2026-07-22 00:27:58 -04:00
.github/workflows Map resident strikes to logical font identities 2026-07-21 17:57:46 -04:00
config Map resident strikes to logical font identities 2026-07-21 17:57:46 -04:00
docs Publish stable AUR package recipe 2026-07-22 00:27:58 -04:00
packaging Publish stable AUR package recipe 2026-07-22 00:27:58 -04:00
scripts Map resident strikes to logical font identities 2026-07-21 17:57:46 -04:00
sources/genera-8.5 Publish Genera 8.5 resident font corpus 2026-07-19 16:38:20 -04:00
specimens Map resident strikes to logical font identities 2026-07-21 17:57:46 -04:00
tests Map resident strikes to logical font identities 2026-07-21 17:57:46 -04:00
.gitignore Publish Genera 8.5 resident font corpus 2026-07-19 16:38:20 -04:00
flake.lock Publish Genera 8.5 resident font corpus 2026-07-19 16:38:20 -04:00
flake.nix Publish Genera 8.5 resident font corpus 2026-07-19 16:38:20 -04:00
LICENSE Publish Genera 8.5 resident font corpus 2026-07-19 16:38:20 -04:00
Makefile Publish Genera 8.5 resident font corpus 2026-07-19 16:38:20 -04:00
NOTICE.md Publish Genera 8.5 resident font corpus 2026-07-19 16:38:20 -04:00
README.md Publish stable AUR package recipe 2026-07-22 00:27:58 -04:00
SPECIMENS.md Map resident strikes to logical font identities 2026-07-21 17:57:46 -04:00

Genera fonts

This repository reproducibly publishes the 89 one-bit bitmap fonts resident in the pinned Symbolics Genera 8.5 base world. It contains a closed, inspectable font-only source corpus, raw-code BDFs for historical addressing, Unicode BDF derivatives, deterministic specimens, and release-ready OpenType Bitmap (OTB) fonts.

The authoritative profile is the set of 89 distinct resident FONT objects in one exact Genera-8-5.vlod, not every font file distributed with Genera. The licensed sys.sct tree contains 224 X BDF files, but those files are used only as local comparison witnesses and are neither copied nor selected wholesale. See Provenance for that boundary.

The current reviewed corpus contains:

  • 89 resident font objects and 90 symbol bindings, with TV:*DEFAULT-FONT* and FONTS:CPTFONT naming the same object;
  • 11,659 represented slots and 10,836 defined glyphs;
  • 71 variable-width fonts;
  • reviewed logical identities for 86 fonts, with 40VR, EINY8, and VT100 explicitly unmapped;
  • 78 Latin-class artifacts and 11 symbols artifacts;
  • 9,985 Unicode glyph instances at standard scalars and 851 at project Private Use Area scalars; and
  • 89 deterministic specimens, one for every resident font.

Browse all 89 font specimens in the compact gallery with full-resolution originals.

These are raster fonts. The build does not trace outlines, scale or hint glyphs, infer vectors, or synthesize missing characters. Unicode derivation changes character addresses and font identity without changing bitmaps, advances, bearings, baselines, or line metrics. The source geometry and raw Genera codes remain authoritative.

Publication and license boundary

Repository-authored tooling and documentation are BSD-3-Clause under LICENSE. The historical font-shape payload is not presented as BSD-licensed. The repository owner has directed its U.S. publication on the “typeface as typeface” basis described in NOTICE.md, which cites 37 C.F.R. § 202.1(e) and U.S. Copyright Office Compendium § 313.3(D).

The repository contains no VLOD, Genera source or executable code, supplied BFD/BDF files, manuals, on-line help, or unrelated world payload. The cited U.S. basis is not legal advice and makes no claim about foreign rights.

Build and verify

A normal build uses only the committed font-only records under sources/genera-8.5/; it does not need Open Genera media:

make dist
make test
make check
make reproducible
make check-specimens

make check is the closed internal corpus gate. make check-external adds BDF compilation/indexing and native X checks and therefore requires bdftopcf, mkfontdir, Xvfb, and Xlib. make reproducible performs two isolated builds and compares every generated byte. make specimens refreshes the tracked specimen gallery; make check-specimens is its non-mutating gate.

The complete local gate is:

make ci VERSION=v0.1.1

The generator itself requires Python 3.10 or newer and the standard library. Release OTB conversion requires exactly fonttosfnt 1.2.5; older releases produce materially different SFNT metrics. OTB validation requires Python FontTools.

Re-import from the licensed world

Re-import is a maintainer operation, not a prerequisite for public builds. It requires a sibling ../genera-emu checkout and the owner's local licensed Genera installation at its normal ignored path:

../genera-emu/.lm-home/opengenera/runtime/Genera-8-5.vlod

Run:

make import
make check-import

The importer first verifies the exact 54,804,480-byte VLOD, SHA-256 a8ee5e86cc7e322f7385af3e0cd579d7650d4dcfc3ce328acbf8b25515dd0672, and the reviewed decoder files. It memory-maps the VLOD read-only, traverses only the resident font objects, validates those objects against local matching BDF/BFD witnesses, and writes only normalized font records plus evidence catalogs. It never copies the VLOD, the supplied font files, Genera source, documentation, executable code, or unrelated heap data.

make check-import regenerates into a temporary directory and byte-compares the result with the committed sources/genera-8.5/ corpus. Review any import change as a new source profile; a different Genera world must not silently replace this one.

Generated profiles

dist/
  raw/
    bdf/                  Genera-code Misc-FontSpecific BDFs and X indexes
    json/                 lossless normalized resident FONT records
    sheets/               octal-labelled complete glyph sheets
    catalog.json
  unicode/
    bdf/                  ISO10646-1 BDFs and X indexes
    specimens/{latin,symbols}/
    catalog.json
    UNICODE-MAPPING.json
  BUILD-MANIFEST.json
  FONT-IDENTITIES.json
  SOURCE-MANIFEST.json
  NOTICE.md
  LICENSE
  SHA256SUMS

Raw aliases are genera-runtime-<name> and genera-<name>. Unicode aliases are disjoint: genera-unicode-runtime-<name> and genera-unicode-<name>. Full XLFD names remain authoritative. Raw BDFs use historical Genera codes under Misc-FontSpecific; do not install or advertise them as Unicode fonts.

For X core-font use from a local build:

xset +fp "$PWD/dist/unicode/bdf"
xset fp rehash
xlsfonts 'genera-unicode-*'

The aliases are X core-font aliases, not Fontconfig family names.

Logical families and styles

Resident object names identify physical bitmap strikes, not necessarily font families. The closed mapping in config/font-identities.json records the reviewed Genera family/face/size relation separately from filenames and raster metrics. For example, HL8, HL10, HL12, HL14, and SWISS20 are strikes of the Symbolics Genera Swiss family; HL8B is its Bold very-small strike, and HL8I is its Italic very-small strike.

The generated BDF and OTB metadata now exposes conventional family, weight, slant, and set width. Genera's X display device associates VERY-SMALL and LARGE with nominal X sizes 8 and 14, while the measured resident lines for HL8 and HL14 remain 11 and 15 pixels. Catalogs preserve the symbolic size, device-specific X size, and recovered raster size separately. MacIvory and other display devices need not use the same numeric crosswalk. Specialty repertoires use isolated desktop families, and the three objects without a resident FONT-SPECS mapping retain explicit neutral, object-specific identities rather than guessed relationships.

Unicode and specimens

The Unicode profile maps 78 ordinary text fonts through the reviewed Genera standard repertoire. Eleven specialty fonts use eight fixed 128-scalar PUA blocks. The Genera allocation begins at U+EE00, immediately after the CADR Fonts version 1 reservation ending at U+EDFF, so the two sibling projects do not collide. See UNICODE.md for the complete contract.

Latin-capable fonts use the Lisp-themed pangram “The five boxing Lisp wizards jump quickly.” Specialty fonts use complete Unicode-addressed glyph sheets. All specimens are generated directly from the recovered one-bit pixels with integer scaling and no smoothing.

Release archives

The release is divided by emitted Unicode content, not by filename or family guess. An artifact is in latin when it has a visible Basic Latin letter in U+0041–U+005A or U+0061–U+007A; symbols is the exact complement. The current closure is 78 Latin fonts and 11 symbols fonts.

make release VERSION=v0.1.1
make check-release VERSION=v0.1.1
make release-reproducible VERSION=v0.1.1

The two deterministic generic archives are Genera-fonts-latin-v0.1.1.tar.gz and Genera-fonts-symbols-v0.1.1.tar.gz, with adjacent SHA-256 files. Unicode BDFs and their one-bit OTB conversions are the user-facing fonts. The generic archives exclude the VLOD, imported source JSON, raw-code BDFs, raw sheets, and all other historical raw-code material. Each archive carries the exact logical-font mapping alongside its Unicode mapping. See RELEASING.md for archive contents and the release proof plan.

Optional native packages are built from those checked archives:

make package-deb VERSION=v0.1.1
make package-rpm VERSION=v0.1.1
make package-arch VERSION=v0.1.1
make package-void VERSION=v0.1.1
# or all four
make packages VERSION=v0.1.1

Each platform receives co-installable genera-fonts-latin and genera-fonts-symbols packages containing only Unicode BDF/OTB fonts and their metadata. See Packaging and installation for native container tests, Nix/Guix use, and publication-template boundaries.

Documentation