# Reproduce the reserved-name character checks Original wrapper: MIT. Observation data: CC BY 4.0. ICU and CPython keep their own licences and are not redistributed. Use ICU4C 78.1 from its official source archive, source tag commit `049e0d6a420629ac7db77256987d083a563287b5`. Archive URL: https://github.com/unicode-org/icu/releases/download/release-78.1/icu4c-78.1-sources.tgz Archive SHA-256: `6217f58ca39b23127605cfc6c7e0d3475fe4b0d63157011383d716cb41617886`. The recorded build used macOS with the default compiler and these commands, from a separate build directory. Set ICU_SOURCE to the extracted source directory and ICU_PREFIX to a new local installation directory. Use paths without spaces; the upstream configure wrapper failed with a spaced source path before compilation, so the unchanged source was built from a path without spaces. ```sh "$ICU_SOURCE/runConfigureICU" MacOSX --disable-tests --disable-samples --disable-extras --disable-icuio --prefix="$ICU_PREFIX" make -j6 make install ICU_LIB_DIR="$ICU_PREFIX/lib" DYLD_LIBRARY_PATH="$ICU_PREFIX/lib" python3 check_names.py ``` ## Linux loading and commands The wrapper accepts macOS `.dylib` and Linux `.so` library names, including versioned files. With `ICU_LIB_DIR` unset, it uses Python's library discovery for an installed ICU. It identifies the loaded ICU major through its filename and exported `u_getVersion` symbol, then binds that version's APIs; it no longer fixes the suffix to one major. The common and internationalization libraries must come from the same installation. For a separate Linux build of the pinned source, run these commands from an empty build directory. `ICU_SOURCE` names the extracted ICU `source` directory and `ICU_PREFIX` the chosen installation directory. `check_names.py` names this delivered wrapper at the final command's location. ```sh "$ICU_SOURCE/runConfigureICU" Linux --disable-tests --disable-samples --disable-extras --disable-icuio --prefix="$ICU_PREFIX" make -j6 make install ICU_LIB_DIR="$ICU_PREFIX/lib" LD_LIBRARY_PATH="$ICU_PREFIX/lib" python3 check_names.py ``` For an ICU already installed through the Linux distribution's package manager, with its shared libraries discoverable: ```sh python3 check_names.py ``` Use CPython 3.12.14 and ICU 78.1 to compare with the published record. Other installed versions are detected and reported but can produce different results. The revised loader was rerun on the same pinned macOS libraries and Python executable, producing identical outputs for all six names. Linux loading and commands were inspected, not executed on Linux; cross-platform execution is not claimed. CPython 3.12.14, official release source commit `2abcf904b8dac8c999d2b3aac76681abb333798a`, loaded the library. Setting the dynamic-library search path is necessary for this build; an initial load without it failed before any example ran. No wrapper behavior was changed to suppress a checker error. The source file calls ICU's spoof API and UTS 46 conversion, using default spoof checks and nontransitional conversion options `0x5e` (STD3, Bidi, ContextJ, nontransitional-to-ASCII and ContextO). ICU reports Unicode 17.0 data. It is not an implementation-conformance check against the current version-18 specifications. It compares six reserved whole-name strings, not browser-rendered labels or real registrations. The record at `../../measurements/P04-lookalike.json` contains exact options, numeric flags, inputs, ASCII outputs and source/library hashes. No DNS, browser navigation, destination fetch or reputation query is part of the program. All native libraries and compiler outputs stay outside the delivery package. The earlier record is preserved unchanged at `../../measurements/earlier-runs/P9/P04-lookalike.json`. Newer published releases include ICU 78.3 (17 March 2026) and ICU 79.1 (22 October 2026), as listed in the [official release index](https://unicode-org.github.io/icu/download/); they were not substituted for the reproduction pin.