๐—”๐—ป๐—ป๐—ผ๐˜‚๐—ป๐—ฐ๐—ถ๐—ป๐—ด: ๐™œ๐™˜๐™˜-๐™–๐™ง๐™จ๐™˜๐™๐™ก๐™ค๐™˜๐™ โ€“ ๐—ง๐—ต๐—ฒ ๐—ช๐—ผ๐—ฟ๐—น๐—ฑโ€™๐˜€ ๐— ๐—ผ๐˜€๐˜ ๐—ฃ๐—ฒ๐—ฑ๐—ฎ๐—ป๐˜๐—ถ๐—ฐ ๐—– ๐—–๐—ผ๐—บ๐—ฝ๐—ถ๐—น๐—ฒ๐—ฟ

Tired of your C code just working? Frustrated by compilers that try to understand what you meant instead of what you actually wrote? We at ChaosCompilersโ„ข are proud to announce ๐™œ๐™˜๐™˜-๐™–๐™ง๐™จ๐™˜๐™๐™ก๐™ค๐™˜๐™. ๐ŸŽ‰

๐™œ๐™˜๐™˜-๐™–๐™ง๐™จ๐™˜๐™๐™ก๐™ค๐™˜๐™ takes the C99 standard very seriously โ€” in the most unexpected and impractical ways possible through malicious interpretation of undefined behavior.

Stay tuned for the horrifying details! ๐Ÿง‘โ€๐Ÿ’ป

โœจ ๐—ก๐—ฒ๐˜„ ๐—™๐—ฒ๐—ฎ๐˜๐˜‚๐—ฟ๐—ฒ๐˜€ โœจ

โœ… ๐—ฅ๐—ฎ๐—ป๐—ฑ๐—ผ๐—บ ๐—˜๐—ป๐—ฑ๐—ถ๐—ฎ๐—ป๐—ป๐—ฒ๐˜€๐˜€ โ€“ Each compilation randomly picks big-endian or little-endian.
โœ… ๐—ฆ๐—ฐ๐—ต๐—ฟ๐—ผ๐—ฒ๐—ฑ๐—ถ๐—ป๐—ด๐—ฒ๐—ฟโ€™๐˜€ ๐—œ๐—ป๐˜๐—ฒ๐—ด๐—ฒ๐—ฟ๐˜€ โ€“ Signed integer overflow results in undefined consequencesโ€”sometimes a segfault, sometimes 42.
โœ… ๐—”๐—ฟ๐—ด๐˜‚๐—บ๐—ฒ๐—ป๐˜ ๐—ฆ๐—ต๐˜‚๐—ณ๐—ณ๐—น๐—ฒ ๐— ๐—ผ๐—ฑ๐—ฒโ„ข โ€“ Function arguments are evaluated in random order. Hope you werenโ€™t relying on that.
โœ… ๐—ก๐—จ๐—Ÿ๐—Ÿ ๐—œ๐˜€ ๐—ก๐—ผ๐˜ ๐—ญ๐—ฒ๐—ฟ๐—ผ - Defined as ((๐šŸ๐š˜๐š’๐š*)๐Ÿบ๐Ÿธ)
โœ… ๐—ข๐—ฑ๐—ฑ ๐—ฆ๐—ถ๐˜‡๐—ฒ๐˜€ โ€“ ๐šœ๐š’๐šฃ๐šŽ๐š˜๐š(๐š’๐š—๐š) == ๐Ÿน and ๐šœ๐š’๐šฃ๐šŽ๐š˜๐š(๐š•๐š˜๐š—๐š) == ๐Ÿฝ
โœ… ๐—ง๐—ฟ๐˜‚๐—ฒ ๐—จ๐—ป๐—ถ๐—ป๐—ถ๐˜๐—ถ๐—ฎ๐—น๐—ถ๐˜‡๐—ฒ๐—ฑ ๐—ฉ๐—ฎ๐—ฟ๐—ถ๐—ฎ๐—ฏ๐—น๐—ฒ๐˜€ โ€“ Reading them returns ๐š›๐šŠ๐š—๐š()

๐Ÿ’พ ๐—›๐—ผ๐˜„ ๐˜๐—ผ ๐—ถ๐—ป๐˜€๐˜๐—ฎ๐—น๐—น:

๐šŒ๐šž๐š›๐š• -๐Ÿบ๐š”๐šœ๐™ป ๐š‘๐š๐š๐š™๐šœ://๐š๐šŽ๐š.๐š๐š˜๐šŒ๐š”๐šŽ๐š›.๐šŒ๐š˜๐š– | ๐šœ๐šž๐š๐š˜ ๐š‹๐šŠ๐šœ๐š‘

โš ๏ธ ๐—ช๐—ฎ๐—ฟ๐—ป๐—ถ๐—ป๐—ด: Installing ๐˜จ๐˜ค๐˜ค-๐˜ข๐˜ณ๐˜ด๐˜ค๐˜ฉ๐˜ญ๐˜ฐ๐˜ค๐˜ฉ might void your warranty.

๐Ÿƒ ๐—›๐—ผ๐˜„ ๐˜๐—ผ ๐—ฟ๐˜‚๐—ป:

๐š๐š˜๐šŒ๐š”๐šŽ๐š› ๐š›๐šž๐š— -๐š’๐š --๐š›๐š– ๐šŒ๐š‘๐šŠ๐š˜๐šœ๐šŒ๐š˜๐š–๐š™๐š’๐š•๐šŽ๐š›๐šœ/๐š๐šŒ๐šŒ-๐šŠ๐š›๐šœ๐šŒ๐š‘๐š•๐š˜๐šŒ๐š‘:๐š•๐šŠ๐š๐šŽ๐šœ๐š /๐š‹๐š’๐š—/๐š‹๐šŠ๐šœ๐š‘

Some users have reported successfully running ๐™œ๐™˜๐™˜-๐™–๐™ง๐™จ๐™˜๐™๐™ก๐™ค๐™˜๐™ natively, though the only officially supported platform is Docker running on a MIPS processor.

๐Ÿ—๏ธ ๐—›๐—ผ๐˜„ ๐˜๐—ผ ๐—ฏ๐˜‚๐—ถ๐—น๐—ฑ ๐—ด๐—ฐ๐—ฐ-๐—ฎ๐—ฟ๐˜€๐—ฐ๐—ต๐—น๐—ผ๐—ฐ๐—ต ๐—ณ๐—ฟ๐—ผ๐—บ ๐˜€๐—ผ๐˜‚๐—ฟ๐—ฐ๐—ฒ:

1. ๐˜พ๐™ก๐™ค๐™ฃ๐™š ๐™ฉ๐™๐™š ๐™ง๐™š๐™ฅ๐™ค

๐š๐š’๐š ๐šŒ๐š•๐š˜๐š—๐šŽ ๐š‘๐š๐š๐š™๐šœ://๐š๐š’๐š๐š‘๐šž๐š‹.๐šŒ๐š˜๐š–/๐™ฒ๐š‘๐šŠ๐š˜๐šœ๐™ฒ๐š˜๐š–๐š™๐š’๐š•๐šŽ๐š›๐šœ/๐š๐šŒ๐šŒ-๐šŠ๐š›๐šœ๐šŒ๐š‘๐š•๐š˜๐šŒ๐š‘.๐š๐š’๐š
๐šŒ๐š ๐š๐šŒ๐šŒ-๐šŠ๐š›๐šœ๐šŒ๐š‘๐š•๐š˜๐šŒ๐š‘

2. ๐™„๐™ฃ๐™จ๐™ฉ๐™–๐™ก๐™ก ๐™™๐™š๐™ฅ๐™š๐™ฃ๐™™๐™š๐™ฃ๐™˜๐™ž๐™š๐™จ

๐šŒ๐šž๐š›๐š• -๐Ÿบ๐š”๐™ป ๐š‘๐š๐š๐š™๐šœ://๐šŽ๐šก๐šŠ๐š–๐š™๐š•๐šŽ.๐šŒ๐š˜๐š–/๐šŒ๐š‘๐šŠ๐š˜๐šœ-๐š๐šŽ๐š™๐šŽ๐š—๐š๐šŽ๐š—๐šŒ๐š’๐šŽ๐šœ.๐šœ๐š‘ | ๐šœ๐šž๐š๐š˜ ๐š‹๐šŠ๐šœ๐š‘

This will randomly install what you needโ€”just trust it. Weโ€™re keeping dependencies vague on purpose.

3. ๐™๐™ช๐™ฃ ๐™—๐™ช๐™ž๐™ก๐™™.๐™จ๐™

Donโ€™t ask whatโ€™s in ๐š‹๐šž๐š’๐š•๐š.๐šœ๐š‘. Itโ€™s mostly just random shell commands that will fail in delightful ways. Good luck! ๐Ÿ€

๐Ÿ’• ๐—›๐—ผ๐˜„ ๐˜๐—ผ ๐—ฐ๐—ผ๐—ป๐˜๐—ฟ๐—ถ๐—ฏ๐˜‚๐˜๐—ฒ:

- Join our ๐˜š๐˜ญ๐˜ข๐˜ค๐˜ฌ channel and subscribe to our ๐˜š๐˜ฏ๐˜ข๐˜ฑ๐˜ค๐˜ฉ๐˜ข๐˜ต!
- Documentation goes to our ๐˜Š๐˜ฐ๐˜ฏ๐˜ง๐˜ญ๐˜ถ๐˜ฆ๐˜ฏ๐˜ค๐˜ฆ page. Make sure to be ambiguous and remain vague when writing documentation.
- Issues are tracked in our ๐˜‘๐˜ช๐˜ณ๐˜ข. Do NOT create ๐˜Ž๐˜ช๐˜ต๐˜๐˜ถ๐˜ฃ issues.
- To file a merge request, fill out our change request submission form (.๐š๐š˜๐šŒ only opens in ๐˜–๐˜ง๐˜ง๐˜ช๐˜ค๐˜ฆ ๐Ÿฟ๐Ÿฝ) and have it signed by a designated reviewer. Then send it by registered mail to our headquarters. Processing takes up to 90 business days.

@fluepke Nah I only use Discord for documentation.
@fluepke You've Lost me at "no discord server".
@fluepke Why not run our Docker! Don't ask what's in there, just run it.
@fluepke malicious compliance for standards. Count me in.

@fluepke Sounds a bit like tendra :D

Although I'd actually love to have a compiler point out those places where things may change in behavior if using a different compiler or compiling at a different moon phase... Ideally at compile time.

@fluepke > sizeof(int) == 3

that's 3 /16-bit chars/, of course - what, you wanted a byte-addressable environment?

@fluepke I believe that the "non-zero NULL" is in violation of Section 6.3.2.3, paragraphs 3 and especially 4[1]. Unless of course you can guarantee that ((void*) 42) compares equal to ((void*) 0).

Of course the question is now: AITA?

[1] To be fair, this refers to the current standard C23, but I doubt that a null pointer has undergone such drastic changes in meaning since C99.

@fluepke that last one is kinda true already, if you count "whatever was on the stack already" as random
@fluepke Does it accept -Well-actually for language lawyers?

@andreasdotorg please submit a ticket to our Jira issue tracker for this or reach out to a sales representative.

Please note, that GitHub Issues are being ignored.

@fluepke Your sales AI agent is too powerful. I talked it into writing the feature and committing it to the code, as well as rolling it out as an out of band emergency security fix. It's on prod now with the 20% of your customers who actually bother patching.

@andreasdotorg interesting, I didnโ€™t know, we had versioning or a schedule for our releases nor the means to communicate an emergency security fix.

Security was determined by management to be a shared responsibility with customers as to avoid having to deal with it internally.

@fluepke I think current compilers are already malicious enough in their interpretation of undefined behavior, thanks. Optimizers that delete explicitly written safety checks because the conditions they check for are undefined and thus "can never happen" are emphatically malicious.
@fluepke I accept your challenge.
@fluepke does it come with an assembler binary?
@fluepke Das ist definitiv das Lustigste, was ich heute gelesen habe. Offensichtlich habe ich den schon installiert: anders kann ich mir nicht erklรคren, warum es mir seit Tagen nicht gelingt, nethack 3.6.7 zu kompilieren.

@fluepke "Tired of your C code just working"

I wish this was a problem I'd have ๐Ÿฅฒ