apache/arrow

6 languages in one tree, 21 lint hooks across 14 tool repos, and 0 tools that see the cross-language conventions — alint is the layer that does.

Narrative
Polyglot wins
Rules
107
Last revalidated
Engineering reference
README on GitHub · .alint.yml

Why this case study matters

apache/arrow is the flagship “language-agnostic polyglot monorepo” pitch for alint — a single tree historically hosting columnar-format reference implementations across a dozen languages, glued together by the cross-language format/ schema spec (FlatBuffers + Protobuf) and the dev/archery/ integration-test harness.

apache/arrow is the canonical multi-language project on GitHub (~14k stars, widely deployed, the basis for every modern columnar data library: Pandas 2.0, Polars, DuckDB, Snowflake’s external table format). Naming it as a target gives alint instant credibility with the data-engineering audience.

A single declarative config replaces the cross-language structural conventions that no per-language linter sees — clang-format only sees C++, rubocop only sees Ruby, flake8 only sees Python, lintr only sees R. The invariants alint enforces (per-language subdir README, per-Ruby-gem layout, per-GLib-sublibrary meson.build, format-spec file integrity, Apache governance triad, per-language tool-config presence) are exactly the layer alint owns and nothing else does.

Headline catch

6 languages in one tree, 21 lint hooks across 14 tool repos, and 0 tools that see the cross-language conventions — alint is the layer that does.

The pitch lands harder when paired with the per-Ruby-gem finding: 8 gem subdirs × 6 required files each = 48 file-existence assertions wrapped in a single for_each_file rule. No Ruby tool checks the layout because no Ruby tool sees the layout from above.

The Apache header rule’s 16 findings against the live tree are ALL legitimate (LLVM-licensed third-party files + auto-generated bindings, all listed in dev/release/rat_exclude_files.txt) — confirming both that the rule fires correctly AND that the v0.10 ship-target registry_paths_resolve rule kind would close the loop.

Where alint earns its keep here

Future story angles

The factual engineering writeup (tooling inventory, mapping table, gap catalogue, validation status footer) lives in the public alint repo at github.com/asamarts/alint/tree/main/examples/apache-arrow/README.md.