Skip to content

Compatibility boundaries

On this page

This page records what the reviewed LibreOffice source catalog establishes and what it does not establish. It is an evidence matrix, not a claim that an installed locale has the same recognition behavior as LibreOffice or Hunspell.

Every row names exactly the .aff/.dic pair in the digest-pinned catalog at LibreOffice/dictionaries commit f2ff99058268502bdcf4cad25c1ca2935ad8aa7d. The catalog verifies the two source-byte digests during ferrolex dictionary fetch; it does not download a license notice and it does not validate a dictionary as part of fetching. See Dictionary fetching for the acquisition contract and Hunspell import contract for the import subset.

Each catalogued pair also has a reviewed SPDX expression and a link to its immutable upstream notice in license evidence. This is provenance for the exact source pair, not legal advice or a blanket statement about the LibreOffice collection.

How to read the status

The columns deliberately use different kinds of evidence:

  • Source encoding is a checked catalog fact. Fetching preserves those bytes, so this column is not an assertion that the pair is already usable by a particular importer entry point.
  • AFF strict gate is a static scan of the pinned .aff file against the documented importer subset. No known AFF error means that the file uses only supported recognition directives or suggestion-only directives. It is not a successful full-pair import, dictionary-entry audit, or recognition result.
  • Strict probe records one current strict import of the digest-verified local source pair. It establishes neither recognition probes nor a reusable fixture.
  • Known boundary identifies why validate --strict must currently be expected to reject the pair, or what still needs live evidence. Suggestion directives alone produce warnings and do not fail strict mode; every other unimplemented directive can affect recognition and is an error.

The matrix intentionally has no general supported checkmark yet. A strict fixture is evidence only for the documented ferrolex subset and its recorded probes; broader support also needs a completed source-license review and language-relevant behavior coverage. This keeps a source catalog from turning into an accidental quality promise.

Pinned source matrix

LocaleScript / practical groupSource encodingAFF strict gateKnown boundary
en_USLatinUTF-8Strict probeThe 2026-08-11 digest-verified exact pair strict-imports after bounded COMPOUNDRULE quantifier support. TRY and NOSUGGEST remain suggestion-only warnings. Recognition probes and an opt-in fixture remain required before a broader support claim.
de_DELatinISO-8859-1Strict fixtureThe 2026-08-11 exact-pair probe strict-imports and builds the runtime cache. It accepts Straße, Häuser, and Häusern, and rejects ferrolex. TRY, MAP, and NOSUGGEST remain suggestion-only warnings; this is not full upstream recognition parity.
es_ESLatinUTF-8Strict fixtureThe exact source uses a variation-selector UTF-8 flag. The fixture covers a stem, suffix form, and Unicode-default casing fallback; TRY remains a suggestion-only warning.
fr_FRLatinUTF-8Strict fixtureThe exact pair accepts its multi-scalar, anchored BREAK patterns and the fixture covers stem, suffix, casing, and KEEPCASE behavior. TRY is a suggestion-only warning; the source count discrepancy remains visible as a warning.
it_ITLatinUTF-8Strict fixtureSlash-prefixed DIC comments, escaped literal slashes, and morphology-only trailing slashes import without changing recognition. HOME, NAME, VERSION, and TRY are suggestion-only warnings; LANG it_IT uses Unicode-default capitalization fallback.
pt_BRLatinUTF-8 with leading BOM in .aff and .dicStrict fixtureThe byte importer normalizes each leading BOM. The fixture covers stem, suffix, and casing; TRY, MAXNGRAMSUGS, MAXDIFF, ONLYMAXDIFF, and WARN are suggestion-only warnings.
pt_PTLatinUTF-8Strict fixtureThe exact pair uses LANG pt_PT with Unicode-default capitalization fallback and has stem, suffix, and casing probes. TRY is a suggestion-only warning.
nl_NLLatinUTF-8Strict fixtureGrouped COMPOUNDRULE flags, COMPOUNDMIN 0, escaped DIC slashes, morphology-only trailing slashes, and KEEPCASE are covered. The fixture includes a generated compound; suggestion directives remain warnings.
hu_HULatin, agglutinativeAFF UTF-8 with ISO-8859-2 fallback; DIC UTF-8Lenient fixtureThe reviewed decoder handles isolated legacy AFF bytes and NEL separators without rewriting source bytes. Stored, affixed, and compound probes survive the runtime-cache roundtrip; the exact strict-import error set is pinned and rechecked in the Hungarian compatibility boundary.
pl_PLLatinISO-8859-2Strict fixtureThe exact-byte fixture imports through the public ISO-8859-2 byte path, compiles and reloads the runtime cache, and covers stem, suffix, and casing probes. Count discrepancies remain warning-only.
ru_RUCyrillicUTF-8Strict fixtureThe 2026-08-11 exact-pair probe strict-imports, builds the runtime cache, accepts русский and русского, and rejects русскии. TRY is the only observed suggestion-only warning; the probes do not establish full upstream recognition parity.
tr_TRLatin, agglutinativeUTF-8Strict fixtureThe digest-verified exact pair strict-imports with FLAG num, including flag 0, entries up to 32 KiB, and up to 4,096 flags per entry. It accepts the recorded yedieminle suffix form, and LANG tr_TR uses dotted/dotless-I capitalization fallback. The probes are not full generated-form or recognition parity evidence.
arArabicUTF-8Strict fixtureThe 2026-08-11 exact-pair probe strict-imports with FLAG long, long-form AF aliases, and alias references in affix continuation flags. TRY, KEY, and MAP remain suggestion-only warnings; this is not full upstream recognition parity.
uk_UACyrillicUTF-8Strict fixtureThe 2026-08-11 exact-pair probe strict-imports with literal BREAK, ICONV, IGNORE, WORDCHARS, bounded negative lookbehind, and start-anchored affix conditions. This is import evidence only, not full upstream recognition parity.
sv_SELatinUTF-8BlockedIts anchored BREAK pattern and ONLYMAXDIFF remain strict errors. Compound safeguards, compound-position flags, FULLSTRIP, and WORDCHARS strict-import.
id_IDLatinAFF ISO-8859-1; DIC UTF-8Blockeddictionary install uses the reviewed per-file encoding override without rewriting cached bytes. WORDCHARS is an additional strict blocker.
hi_INDevanagariUTF-8 with leading BOM in .affBlockedThe byte importer normalizes the leading BOM; BREAK, ICONV, and WORDCHARS remain outside the subset.
bn_BDBengaliUTF-8BlockedThe 2026-08-11 exact pair reports source-aware strict errors for its $-suffixed SFX header counts (starting at AFF line 142) and empty DIC flag sections (for example line 87,465), rather than silently importing them. ICONV strict-imports; no reviewed strict fixture or recognition probes exist yet.

No known AFF error is purposefully weaker than "strict validation passes". For example, strict mode also checks malformed affix rules, dictionary entries, declared encoding, size limits, and flags. Conversely, a blocked locale may still be useful in lenient mode for diagnostic exploration, but lenient output must never be presented as equivalent dictionary recognition.

License evidence

These expressions are reviewed against the named notice at the pinned source revision. OR records an upstream license choice; consumers that redistribute a dictionary must select and comply with one permitted option.

LocaleReviewed SPDX expressionImmutable upstream notice
en_USGPL-2.0-onlyNotice
de_DEGPL-2.0-only OR GPL-3.0-onlyNotice
hu_HUMPL-2.0-or-later OR LGPL-3.0-or-laterNotice
es_ESGPL-3.0-or-later OR LGPL-3.0-or-later OR MPL-1.1Notice
fr_FRMPL-2.0Notice
it_ITGPL-3.0-onlyNotice
pt_BRLGPL-3.0-only OR MPL-1.1Notice
pt_PTGPL-2.0-only OR LGPL-2.1-only OR MPL-1.1Notice
nl_NLBSD-3-Clause OR CC-BY-3.0Notice
pl_PLGPL-2.0-only OR LGPL-2.1-only OR MPL-1.1 OR Apache-2.0 OR CC-BY-4.0Notice
ru_RUBSD-3-ClauseNotice
tr_TRMPL-2.0Notice
arGPL-2.0-or-later OR LGPL-2.1-or-later OR MPL-1.1Notice
uk_UAMPL-1.1Notice
sv_SELGPL-3.0-onlyNotice
id_IDLGPL-3.0-onlyNotice
hi_INGPL-2.0-onlyNotice
bn_BDGPL-2.0-onlyNotice

Reproducing and advancing a row

Use an explicit cache, then validate the installed exact bytes. For a current strict-import candidate, prefer install with pl_PL:

ferrolex dictionary install pl_PL --cache .ferrolex-dictionaries

Rows marked Blocked intentionally return exit status 1 from install. That result is diagnostic evidence, not a failed download.

For shared legacy encodings, validate and install select the lossless decoder from the AFF SET declaration. Never relabel or rewrite the fetched cache in place: the cache digest is evidence for the upstream bytes, while the importer decodes only in memory. id_ID is a special case because its AFF and DIC use different encodings; its catalogued install path supplies the reviewed per-file override.

When a row becomes a strict fixture, add an opt-in local fixture that records the source revision, both source digests, decoding, accepted probes, rejected probes, and the source-specific license evidence. The existing real-world fixture procedure is the required format for that evidence. Do not commit third-party dictionary contents merely to make the matrix green.

Explicit scope limits

CJK locales are not catalogued or represented by this matrix. Chinese, Japanese, and Korean need a dedicated text-segmentation contract before a Hunspell pair can be described as text-checking support.

Urdu is also absent, for a different reason: the pinned LibreOffice collection has no Urdu Hunspell pair. It must not be silently substituted with a different source; adding it requires its own provenance, license, encoding, and compatibility review.

Recognition scorecard

The optional external Hunspell oracle produces a per-locale accept/reject scorecard. Reproduce it with:

scripts/fetch-compat-fixtures.sh --set scorecard /tmp/ferrolex-compat-fixtures
FERROLEX_COMPAT_FIXTURES=/tmp/ferrolex-compat-fixtures \
FERROLEX_COMPAT_FIXTURE_SET=scorecard \
FERROLEX_COMPAT_ORACLE=hunspell \
FERROLEX_COMPAT_SCORECARD=/tmp/recognition-scorecard.tsv \
FERROLEX_COMPAT_SCORECARD_BASELINE=crates/ferrolex-hunspell/tests/real_world/scorecard-baseline.tsv \
  cargo test -p ferrolex-hunspell --test real_world -- --nocapture

Weekly, manual, and release compatibility runs invoke Hunspell for the seven scorecard fixtures and compare their deterministic rows with the checked-in baseline. Each artifact records the corpus recipe, oracle command, and oracle version as well as the per-locale agreements, disagreements, and a per-word outcome digest that binds the UTF-8 corpus word and both engine decisions. The 150-minute job limit is based on the preceding 107m10s all-fixture measurement and leaves diagnostic/artifact headroom; it does not claim a faster seven-locale run. The scorecard is evidence for its recorded corpus, not a general Hunspell-parity assertion.