But it&#x27;s not a compatible <i>API</i>. At that point, I have a second library and everyone has to rewrite their code to use it. This defeats one of the main benefits of having libraries in the first place.<p>The benefit of a library, fundamentally, is that any library with a compatible interface (described by the API) can be dropped in and used in place of another library without modification to the calling code. Cloning functionality is not the same thing if we have to put a prefix: thrawaykf05s_leftPad or Jtsummers_leftPad in front of everything.<p>In theory, as a developer using dynamically linked libraries, I can drop in <i>any</i> version of a library without recompiling. As a user that means you can drop in AMD&#x27;s OpenGL implementation or a GPL implementation or Nvidia&#x27;s and see no difference in how you launch your program (though you&#x27;d see a difference in performance and perhaps behavior).<p>(OpenGL isn&#x27;t a great example because the consortium running it won&#x27;t do this, but it is a great example because there are many implementations.)<p>Now, as a developer you have to develop 100 code paths to handle each potential OpenGL implementation. Or maybe some nice person does that for you with a wrapper library. But now that wrapper library API is <i>also</i> copyrighted and it&#x27;s out of date. So <i>another</i> API comes into existence that wraps it <i>AND</i> adds new APIs to its backend. That&#x27;d be really fucking stupid.