Uh, this stb library [1] seems to follow a horrible pattern: not only  combining your code into a single .c file (which is fine, like the sqlite amalgamation), but putting the code into a single .h file. [2]<p>I&#x27;ve never seen a C or C++ codebase that does this.  Maybe you can rely on link-time deduplication, but it will still cause duplicate compilation, and thus increased compile times.  I haven&#x27;t thought it about it lately, but I thought the common wisdom was not to depend on the linker to dedupe or strip unused symbols.  Actually it should cause link-time errors, not just duplicated cause.<p>The justification is also somewhat ridiculous: <i>Why single-file headers?</i><p><i>Windows doesn&#x27;t have standard directories where libraries live. That makes deploying libraries in Windows a lot more painful than open source developers on Unix-derivates generally realize. (It also makes library dependencies a lot worse in Windows.)</i><p>Really?  Why not just lay out your source normally, and then munge it with a simple script into something Windows can handle (similar to sqlite)?  Because writing trivial scripts on Windows is also a pain?<p>[1] <a href="https:&#x2F;&#x2F;github.com&#x2F;nothings&#x2F;stb" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;nothings&#x2F;stb</a><p>[2] <a href="https:&#x2F;&#x2F;github.com&#x2F;nothings&#x2F;stb&#x2F;blob&#x2F;master&#x2F;stb_c_lexer.h" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;nothings&#x2F;stb&#x2F;blob&#x2F;master&#x2F;stb_c_lexer.h</a>