← Dokumentatsioon
Dokumentatsioon

Accessibility: European Accessibility Act and EN 301 549

Status 31-10-2026: specification only. Nothing in this document is built yet. It says which requirements apply to EUZOS as an operating system, what exists today, and a phased plan with estimates and owner decisions.

This is not legal advice. It is the project's own reading of public texts. The questions a lawyer has to answer are in LEGAL-CHECK.md, item LC-3, and summarised in §2.3.

How to read the marks.

  • [T] read in a public text, listed in §9 and in SOURCES.md.
  • [2] from a secondary source only (a commentary or vendor site). Not verified in the primary text.
  • [P] proven from this tree: read in the code or found with grep on 31-10-2026.
  • [N] not found by grep. That is weaker than proof of absence.
  • [E] estimate, with the sum shown.
  • [S] suspected: not checked.
  • [O] the project's own interpretation of a text. A lawyer or an auditor may read it differently.

Summary

  1. EUZOS is very likely within the product category "consumer general purpose computer hardware systems and operating systems for those hardware systems" as soon as it is offered to consumers [T][O]. Whether it is in scope while it is offered to organisations only is a legal question (LC-3). The microenterprise exemption in the Directive covers services, not products [T].
  2. The largest gap is architectural. EN 301 549 clause 11.5.2.1 requires platform software to provide documented accessibility services [T]. EUZOS apps draw pixels and keep a list of click rectangles [P], so an assistive technology has nothing to read. An accessibility tree in libs/ui is the core of this plan.
  3. Today: a tested colour contrast in both themes, a pointer size setting, 34 languages, and keyboard handling in part of the screens. Missing: a shared focus model, high contrast, a text size setting, a screen reader, an accessibility API and accessibility documentation (§3).
  4. Estimate: about 106 agent-days with a licensed speech engine, about 146 with an own one (§5). Braille and the external conformity work are on top. The first 30 agent-days (phases A0 to A3) give the largest gain per day for sighted keyboard users and users with low vision.
  5. The speech engine is the hardest owner decision (§7, A-3): it collides with the rule of own code.

1. The texts and their status

TextWhat it isStatus as read
Directive (EU) 2019/882, "European Accessibility Act"The law, through each Member State's national transpositionApplies to products placed on the market after 28 June 2025 [T]
EN 301 549 V4.1.1 (2026-09)Harmonised-standard candidate from ETSI, CEN and CENELEC, prepared under request C(2022) 6456 for this DirectivePublished; ETSI file dated 2 September 2026 [T]. It gives a presumption of conformity only "once ... cited in the Official Journal" [T]. Secondary sources dated October 2026 say this has not happened yet and expect it around the end of 2026 [2]. Check the Official Journal before relying on this.
EN 301 549 V3.2.1 (2021-03)The previous edition, for the Web Accessibility Directive (EU) 2016/2102Not a route to presumption under the EAA [T: V4.1.1 foreword; 2]
WCAG 2.2Clause 11 of V4.1.1 applies it to non-web software through its "Intent" text [T]W3C Recommendation; not read separately for this document

This plan uses V4.1.1. Clause numbers below are from that edition; some differ from V3.2.1 (11.5.2.2 is now void, for example) [T].

The standard is one voluntary means of conforming [T]. Annex ZB maps clauses to the Directive, and its own note says the tables in clause A.2 are the practical way to assess a product [T].

2. What applies to EUZOS

2.1 Which parts of the Directive [T]

  • Article 2(1)(a): "consumer general purpose computer hardware systems and operating systems for those hardware systems".
  • Article 4(2): all products meet Annex I Section I; products other than self-service terminals also meet Section II.
  • Annex I Section I, point 1: information on the product and instructions for use, available through more than one sense, with readable fonts, and describing the user interface and accessibility features. Point 1(b)(ix) asks for a list of assistive devices tested with the product.
  • Annex I Section I, point 2: user interface and functionality. For EUZOS mainly: (a) more than one sense, (c) flexible magnification, brightness and contrast, (d) an alternative to colour, (e) an alternative to audible signals, (f) flexible ways of improving clarity, (g) user control of volume, (h) sequential controls and no simultaneous actions, (j) no seizure triggers, (k) privacy of accessibility features, (l) an alternative to biometrics, (m) consistency and enough time, (n) software and hardware for interfacing with assistive technologies.
  • Annex I Section II: packaging and instructions for installation, maintenance, storage and disposal.
  • Article 14: the requirements apply only as far as they cause no fundamental alteration and no disproportionate burden. The assessment follows Annex VI and is kept for five years. Microenterprises dealing with products need not document it, but must give the facts if an authority asks. Relying on it must be notified, except by a microenterprise.
  • Article 3(23): a microenterprise has fewer than 10 persons and at most EUR 2 million turnover or balance sheet.
  • Article 4(5): the microenterprise exemption is for those providing services. It does not exempt products.
  • Article 15: presumption of conformity through cited harmonised standards.

Not read for this document: the recitals, Annex II to VI in full, the manufacturer's duties in detail (Article 7, CE marking, technical documentation), and any national transposition.

2.2 Which clauses of EN 301 549 V4.1.1

EUZOS is "platform software" and "non-web software that provides a user interface" [T][O]. Note 4 of 11.5.2.1 names operating systems explicitly [T]. The tables are A.3 (non-web software), A.5 (all ICT), and A.1 or A.2 for what EUZOS publishes on the web or as documents. Table A.4 (hardware) applies to whoever sells a machine, which raises question 3 of LC-3.

ClauseRequirement [T]Why it matters to EUZOSState (§3)Phase
4.2.1-4.2.11Functional performance: usage without vision, with limited vision, without colour, without hearing, with limited manipulation, limited cognition, privacy, ...The outcome that all phases servePartlyall
5.1Closed functionality must work without attaching assistive technology[O] Everything before a user can install or start anything: boot messages, installer, login, screen lock, recovery. A reader started later does not help thereMissingA7
5.2Activating a feature must not rely on a method that does not support the needA blind user must be able to switch on speech without seeing the screenMissingA7
5.3Biological characteristics are not the only meansPassword login exists; holds also when fingerprint login arrives (backlog)Met today [P]keep
5.6Status of locking or toggle controls, tactile or auditory, and visualCaps Lock, Num Lock, software togglesUnknownA5
5.7Key repeat, if it cannot be off: delay and rate adjustable up to 2 sThe keyboard driver and the on-screen keyboardMissing [N]A5
5.8Double-strike: delay adjustable to at least 0.5 s, where there is such a capabilityOnly if built, but useful for tremorMissing [N]A5
5.9A mode without simultaneous actionsCtrl+Alt+..., Super+..., Ctrl+Shift+Esc: needs sticky keysMissing [N]A5
7.1, 7.3Subtitle playback, synchronisation, characteristics, user controlWhere EUZOS shows video: Chromium today, a player laterUnknownA9
7.2Audio description playbackThe sameUnknownA9
11.1.1Text alternativesIcons need namesPartlyA6
11.1.3Information and relationshipsThrough the treeMissingA6
11.1.4.1No colour aloneAudit neededUnknownA0
11.1.4.3, 11.1.4.11Contrast, also of non-textTested for tokens, not per screenPartlyA3
11.1.4.4, 11.1.4.10Resize text to 200 %, reflowLayout follows the screen, not the userMissingA4
11.2.1.1, 11.2.1.2Keyboard, no keyboard trapSome screensPartlyA1
11.2.2.1Timing adjustableToasts, screen lock, dialogs with a time limitUnknownA0
11.2.3.1Three flashesAnimations and the fiery logoUnknownA0
11.2.4.3, 11.2.4.7, 11.2.4.11Focus order, focus visible, focus not obscuredNo shared modelPartlyA1, A2
11.2.5.8Target sizeTablets and touchUnknownA0
11.4.1.2Name, role, valueThrough the treeMissingA6
11.5.2.1Documented platform accessibility services covering 11.5.2.5 to 11.5.2.17The core requirement on an OSMissingA6
11.5.2.3Software should use those services (recommendation)EUZOS apps get it through libs/ui, Chromium through a bridgeMissingA6, A8
11.5.2.4Assistive technology uses those servicesThe EUZOS reader itselfMissingA7
11.5.2.5-17Object information, table headers, values, labels, parent-child, text, actions, focus, change notification, modificationThe fields of the treeMissingA6
11.6.1, 11.6.2User control of accessibility features; software does not disrupt themSettings › AccessibilityMissingA3, A6
11.7Software follows the user's preferences; Note 6 names colour filters, contrast, text size, pointer size and text cursorApps through libs/ui follow by construction; Chromium needs passing onPartlyA3, A4
12.1-12.3Accessible product and service information; documentation names accessibility features and how to get supportThe website, FAQ and helpMissingA10

These are questions, not answers. Each is in LC-3.

  1. Is EUZOS "consumer"? docs/BUSINESS-PLAN.md targets organisations. The Directive defines a consumer by purpose outside trade or business [T]. Whether a general-purpose OS sold to businesses, but obtainable by a private person, is in scope is not something this reading can settle.
  2. Who is the economic operator, and which duties follow: the EUZOS project, a reseller, a hardware partner. Which company form and size counts, and whether EUZOS is a microenterprise when it first sells.
  3. Software without hardware. Which duties apply to an OS installed by the customer on a machine they already own, and is a free download "placed on the market"?
  4. Article 14: can a young OS rely on disproportionate burden, for example for a screen reader in 34 languages, and for how long? What exactly must be notified, and to whom?
  5. The transition: the state of the rules for versions delivered before accessibility is complete, and for test releases to a small circle.
  6. National law: the Member States of first sale, starting with the Netherlands. No transposition has been read.
  7. Chromium: responsibility for accessibility inside a component shipped under exception U-16.
  8. Services: do the profile server, mail or the update service fall under Article 2(2)? Not assessed here.

3. What exists today

Checked in this tree on 31-10-2026 by grep and by reading. Grep of 101 source files in libs/ui/src does not replace an audit; phase A0 is that audit.

AreaStateEvidence
Keyboard, shellPartly. Alt+Tab switches windows without a list, Ctrl+Shift+Esc opens Task Manager, the menu has Tab, Enter and Esc, login and forms use Tab between fields[P] docs/WINDOWS.md, docs/UX-BASICS.md, docs/DESKTOP-DESIGN.md §2-3
Keyboard, appsPartly. 17 of 101 files in libs/ui/src have a Tab handler; that says nothing about whether it reaches everything[P] grep; completeness unknown
Shared focus modelMissing. Focus is a separate field per screen, for example search_focus in the explorer[P] libs/ui/src/apps/explorer.rs; [N] no shared ring helper
Focus visiblePer screen where it exists: "the focus is a border" in the menu, a text cursor in fields[P] docs/DESKTOP-DESIGN.md; no check across screens
ContrastGood base. Tokens tested to WCAG 2.1 AA in both themes (contrast_aa_in_both_themes) and a custom theme with minimum contrast[P] libs/ui/src/color.rs
High contrast modeMissing[P] docs/BACKLOG.md lists it as to do
Text sizeMissing as a user setting. Metrics scale with the screen[P] libs/ui/src/apps/mod.rs, toast.rs; [N] no setting
Pointer sizeExists: PointerSize[P] libs/ui/src/login.rs
Screen reader, speechMissing. Only a comment that a name is "the name a screen reader would read"[P] libs/ui/src/desktop.rs, docs/DESKTOP-DESIGN.md
Accessibility APIMissing. Drawing is immediate mode, plus a list of (Rect, Hit) per draw[P] libs/ui/src/apps/taskmgr.rs as an example
Text in words, not colourNot audited. The new per-core labels in Task Manager use words and letters[P] for that one screen
Sound alternativesUnknown. Notifications exist visuallyA0
CaptionsNo own video player; web video runs in Chromium. No system caption setting[N]
BiometricsNot used; password login[P] backlog lists fingerprint as future
Languages34 languages, 32 of them drafts not yet reviewed by a native speaker; helps 4.2.10, and multiplies the speech problem[P] docs/LANGUAGES.md
Accessibility documentationMissing[N] nothing in docs/faq
Tested assistive devices (Annex I 1(b)(ix))None[P]

4. Architecture

4.1 Focus: one model in libs/ui

Every screen already builds a list of click rectangles during its draw. A new Focus type takes the same list, extended with an order and a kind (button, field, list item), and handles Tab, Shift+Tab, arrows, Enter, Space and Esc in one place. Screens stop keeping their own booleans over time. It draws one shared ring, tested for non-text contrast (11.1.4.11) against the tokens, and scrolls the focused item into view (11.2.4.11).

Not a retained widget toolkit: the immediate-mode style of libs/ui stays.

4.2 The accessibility tree in libs/ui

During a draw, a screen emits a node next to what it paints. A node maps to EN 301 549 like this:

FieldClause [T]
role, name, description, bounds, states11.5.2.5 Object information
row, column, header cell11.5.2.6
value, minimum, maximum11.5.2.7, 11.5.2.17
labelled-by11.5.2.8
parent, children11.5.2.9
text and caret11.5.2.10
actions11.5.2.11, 11.5.2.12
focused, selected11.5.2.13, 11.5.2.14
changes between two trees11.5.2.15, 11.5.2.16

Rules:

  • No cost when nothing listens. Building the tree is behind a flag read once per frame. The display work of docs/SMP-SCALABILITY.md must not pay for it. Measure with perf.
  • Secrets. A password field exposes its role and a character count, never its text, as the login screen draws it today (libs/ui/src/login.rs). 4.2.11 and Annex I 2(k) [T].
  • Shared helpers first. button, card, segmented and so on emit their own node, so most screens need only names for icon-only parts.
  • Change notification comes from comparing two trees with stable ids, so a screen does not have to report changes.

4.3 The service

  • Kernel-drawn screens (shell, login, installer, kernel-drawn apps) hand their tree to a kernel a11y service directly.
  • App packages send theirs over EAP. New wire messages in libs/eap, libs/eapp sends them on request, and the app host checks them like any other app input: bounded, strict decoding, fuzzed.
  • svc.a11y gives an assistive technology the tree of the focused window and the notifications. Reading other apps' screens is as sensitive as the screen capture rules (docs/SCREEN-SECURITY.md): a privileged capability, allowed only for signed assistive packages, with the user's consent, and logged.
  • This service is the "documented platform accessibility service" of 11.5.2.1, so the wire format gets a public document. That document is a deliverable, not an afterthought.
  • Actions go through the tree's action list, not through fake key events.

4.4 The screen reader

screen (draw) -> tree -> a11y service -> reader (package, own process) -> speech engine -> sound
                                                                       -> braille display (later)
  • A normal app package without a window, so it can be updated separately and revoked (docs/LAYERED-UPDATES.md).
  • It has to work before sign-in (5.1, 5.2). The installer, login and screen lock must carry the reader and one voice, and a key combination plus a sound must announce the mode with no screen at all. This is a size cost for the boot stick.
  • Speech: see A-3. Interruption and rate control are 5.1.3.4 and 5.1.3.5 [T].
  • Sound must work early; on a machine whose sound driver fails, the reader has no output. State this honestly in the tested-hardware list.
  • Braille: a USB HID profile, no earlier than after the first reader version. Own code from the public USB HID Braille usage page. No GPL reader or braille driver is read (rule of docs/drivers/CLEANROOM.md).

4.5 Chromium

Chromium keeps its own accessibility tree. Getting it to the EUZOS reader needs a bridge on the Linux layer; how much of that Chromium's existing Linux code path expects is unknown [S]. Phase A8 starts with one read-only study from public Chromium documentation and only then estimates the build. Until then, web content is inaccessible to the EUZOS reader, and this must be said in the documentation. libs/web (the own browser) gets a tree from its layout, at less cost.

4.6 High contrast and text size as system preferences

  • High contrast is a palette in color.rs, on the same path as set_theme and set_custom, so every token follows. Brand colours in fixed constants need a review; color.rs says they stay the same in all themes [P].
  • Text size is a factor in Metrics::font, stored in the profile, so it follows the user. Layouts that assume a text height are the real work: 200 % (11.1.4.4) breaks many rows and buttons, and 11.1.4.10 asks for reflow.
  • Both are handed to Chromium as far as its flags allow (11.7 Note 4), and to apps through libs/eapp so packages follow by construction.

5. Phases

Each phase ends with host tests in the style of libs/ui (draw every screen, assert the tree, the order and the contrast), translations in all 34 languages, and notes here. Dependencies are in the last column.

PhaseContentClausesExit testAgent-days [E]Needs
A0Audit: every screen against table A.3 and A.5, one list with pass, fail, not applicable. Colour-only meaning, timing, flashes, target size, sound-only signals11.x, 4.2The list is committed; §3 is replaced by it3
A1Keyboard-only navigation: shared Focus (3 d), shell, login, installer, lock (4 d), all apps and Settings (10 d). Window list on Alt+Tab, no traps11.2.1.x, 11.2.4.3A scripted test reaches and operates every control of every screen with keys only17A0
A2Focus visible: one ring, always in view, contrast tested (1 d), sweep (3 d)11.2.4.7, 11.2.4.11, 11.1.4.11Every focusable item in every screen shows a ring that passes the contrast test4A1
A3High contrast: palette, Settings › Accessibility, a shortcut, icons, fixed colours (4 d), non-text and per-screen checks (2 d). Colour-only findings of A011.1.4.1, 11.1.4.3, 11.1.4.11, 11.6.1All screens in make ui in the new theme, with 7:1 for text as the target of decision A-56A0
A4Text scaling: user factor up to 200 % (2 d), layouts and reflow (10 d). Magnifier in the compositor, keyboard-driven (3 d): not in the request for this plan, but Annex I 2(c) names magnification [T] and the backlog lists it11.1.4.4, 11.1.4.10, 11.7All screens render at 100, 150 and 200 % with no clipped text; the magnifier follows the focus15
A5Input: key repeat delay and rate, sticky keys, Caps Lock status by sound and on screen, double-strike, optional5.6, 5.7, 5.8, 5.9Settings and tests in the keyboard path, on PS/2, USB and on-screen4
A6Accessibility tree: types and wire (3 d), helpers and shell (5 d), apps (7 d), changes and notifications (3 d), public document and fuzz (2 d)11.5.2.1, 11.5.2.5-17, 11.4.1.2, 11.1.1, 11.1.3A test assistive client reads and operates every screen over the service; zero cost when off, measured20A1
A7Screen reader: reader logic (8 d), before sign-in and activation (3 d), speech integration (5 d if licensed, 45 d if own: A-3)5.1, 5.2, 11.5.2.4Install, log in, open Settings, read and write a note, with the screen off16 or 56A6
A8Chromium and libs/web: study (2 d), bridge (10 d, low confidence)11.5.2.3, 11.7The reader reads a test page in Chromium12A6
A9Captions: system preference for caption style, passing it to Chromium, rules for a later own player, audio description selection7.1, 7.2, 7.3A test video with closed captions in Chromium follows the setting4
A10Documentation and evidence: accessibility page, FAQ, tested devices list, table A.x filled in, first Annex VI assessment if used. External evaluation not included12.1-12.3, Annex I 1The documents exist in an accessible format5all

Sum. 3 + 17 + 4 + 6 + 15 + 4 + 20 + 16 + 12 + 4 + 5 = 106 agent-days with a licensed speech engine; with an own engine A7 is 56 instead of 16, so 146. Braille (about 10) and any speech language beyond the first two are not in this. Per language a licensed voice costs little; an own voice costs roughly 10 agent-days and listening tests by native speakers, so "all 34 languages" for an own engine is not credible in any near plan.

Confidence. A0-A5: medium to good, they resemble earlier work on libs/ui. A6: medium. A7 with an own engine and A8: low.

Not agent work. Tests with people who use assistive technology, an external audit, and a lawyer. Automated tests cannot show that a blind person can actually use EUZOS. No claim of conformance should be made without those.

Suggested order: A0, A1, A2, A3, A5, A4, A6, A7, A8, A9, A10. A3 and A5 before A4 because they are cheap and A4 touches every layout. Other work continues in parallel; a new screen from A1 on uses Focus, and from A6 on emits nodes.

6. Risks

  • Late work on the tree is more expensive with every new screen. Agreeing on the shared helpers early is the cheapest part.
  • Text at 200 % is likely to expose fixed heights throughout. The estimate may grow after A0.
  • The boot stick size and sound: the reader before sign-in needs a voice and a working sound driver in the installer.
  • Security: a reader sees everything. A compromised one is a keylogger with a screen. See §4.3.
  • Chromium: a bridge may depend on behaviour that changes between Chromium versions.
  • Claims: "accessible" on a website without evidence is a risk in itself.

7. Owner decisions

#DecisionDefault if the owner does not choose
A-1Build now, or wait for the answer to LC-3?Build A0-A3 now. Useful in any answer, and legal questions do not limit the building work (owner, 31-10-2026). The later phases are planned after LC-3 is looked into
A-2The order of §5As suggested
A-3Speech engine. (a) Licensed commercial voices: a new exception in EXCEPTIONS.md, cost, a European vendor if there is one. (b) Own formant synthesis: fits the rule of own code, sounds robotic, costs about 40 more agent-days for two languages. (c) GPL engines: not considered, conflict with license = "Proprietary" and the clean-room rule(a), proposed as a new exception once A7 starts, with (b) kept open. The reader talks to a small speech interface so that the engine can be replaced. Nothing is approved by this document
A-4First speech languagesDutch and English
A-5High contrast targetText 7:1, non-text 3:1 (above the AA requirement of 4.5:1 and 3:1), one dark palette and one light palette
A-6Text size range100 to 200 % in steps of 25
A-7Reader before sign-in: how to start it, and where the choice is storedA key combination held at the login screen with a spoken and audible confirmation, stored per machine without any personal data. The combination is checked against docs/WINDOWS.md first
A-8Which editionEN 301 549 V4.1.1, revisited when the Official Journal lists it
A-9Scope by editionDesktop first. Server: the consoles and Edge Admin after that; a headless server has no user interface here. Raspberry Pi follows through libs/ui
A-10Budget and moment for a lawyer, an audit and tests with usersBefore the first sale to consumers, and before any public claim of conformance
A-11Public wording until thenThe website lists what exists and what does not, and makes no claim of conformance

8. Honest limits of this document

  • The Directive was read through the legislation.gov.uk copy of the adopted text, because the EUR-Lex page did not come through the fetching tool. It should be the same text. For anything legal, use the Official Journal.
  • The Directive's articles were read by way of article summaries with short quotes, not word by word. Annex I likewise.
  • EN 301 549 V4.1.1 was read directly, for the clauses named. Clause numbers and titles in §2.2 are from that PDF. Not every row of tables A.3, A.5 and ZB.1 to ZB.5 was checked one by one, so A0 goes through them.
  • The citation status in the Official Journal rests on commercial accessibility sites, which disagree with each other on dates. No Commission page or Official Journal page was read.
  • Which clauses apply in the end is for an auditor. "Unknown" in §2.2 means not checked, not failed.

9. Sources

See SOURCES.md, "Accessibility". Primary: Directive (EU) 2019/882; ETSI EN 301 549 V4.1.1 (2026-09), with Annex ZB and clause A.2. Secondary, for the citation status only: Legalithm, Deque, EqualWeb and others, read 31-10-2026.