Contributing
sass2mlir is looking for contributors. The project is at 0.10.0: the
core loop — byte-exact lift/lower, the analyses, the register allocator, the
apply engine, intercept — is built and regression-gated, but the
interesting work is exactly the kind a community can parallelize: more
architectures, more passes, more corpus. If you know GPU
assembly, compilers, or just like breaking tools on weird
cubins, there’s a place for you here.
The project is AGPL-3.0+. Contributions land as pull requests against the
main repository; every source file carries the SPDX header
(SPDX-License: AGPL-3.0+, Copyright (c) SASS2MLIR Contributors), which is
also how authorship is tracked — contributors hold their own copyright.
Good places to start
Roughly in order of how much existing infrastructure you can lean on:
| Area | What you'd do | Needs |
|---|---|---|
| Corpus & validation | Donate cubins from unusual toolkits/archs; extend the corpus regression; file decode/encode mismatches with minimal reproducers | a GPU, curiosity |
| Pass plugins | New SASS→SASS transforms in passes/ — scheduling, dequant strength reduction, epilogue fusion; the ABI is small and the shipped passes are the examples | C++, GPU arch intuition |
| Opcode tables | Extend or refine the probe-derived opcodes/SM* tables; new-architecture bring-up is a data problem, not a rewrite | patience, access to the GPU |
| Tooling & docs | Probing tools, harvest/intercept workflows, these docs, example walkthroughs | writing, Python |
Not sure where you fit? The examples are the fastest way to find out which layer of the stack you enjoy — every one of them is a real workflow you can run and break.
How a patch lands
- Build and gate green first. Install from source,
run
ninja -C build check-sass, and have the corpus regression passing before your change — that’s your baseline. - Make the change. Follow the code style — it is enforced by review, not by a formatter, so matching it from the start saves everyone a round trip.
- Prove it the project’s way. The correctness culture is byte-exactness
and oracles, not vibes:
- lift/lower changes →
roundtripstays at zero mismatches, corpus-wide; - encoder changes →
crosscheckon the affected corpus; - a pass → report-mode output reviewed first, then
mode = "apply"with a byte-diff showing only the intended instructions changed, plus a correctness gate on real hardware where the pass changes semantics;
- lift/lower changes →
- Changelog it. User-visible changes get an entry under
Unreleasedin the changelog as part of the PR. - PR with the evidence in the description — gate output, not adjectives.
The social contract, briefly
- Technical disagreement is normal and welcome; bring measurements. This project’s own history is full of confident theories killed by a two-minute probe — see how the megakernel campaigns’ lessons were all “measured, not theorized”.
- Be direct, be kind, assume competence. No harassment, no dignity games — maintainers’ call, enforced.
- Security issues (a kernel-level attack primitive, a sandbox-relevant bug) go to the maintainers privately first, not the public tracker — the blacklisting work is exactly the kind of thing coordination helps.