On Thu, 27 Jul 2006, David Lang wrote: > > > (*) I will, in fact, claim that the difference between a bad programmer > > and a good one is whether he considers his code or his data structures > > more important. Bad programmers worry about the code. Good programmers > > worry about data structures and their relationships. > > personally I'd add to this that after the data structures are defined and you > turn to the code the API is significantly more important then the code itself. I think people sometimes put too much emphasis on ABI's. Sure, if you're depending on a library, the ABI is supremely important. But I literally believe that one of the things that makes open source technically superior to most other projects is the fact that ABI's can be changed more easily, and sometimes at all. If you have good data structures, the ABI's are largely irrelevant, and if you have a problem with an existing ABI, you can just write a new entrypoint instead (and leave the old ABI alone). On the other hand, if you have bad datastructures, the ABI often reflects that, and having the balls to say that your ABI's are broken and need to be re-done in order to fix the data structures is _very_ important. Otherwise you'll never be able to fix anything. So I think that ABI's are often _way_ overhyped. If they are good, everybody is happy. But if the interfaces are bad, you had better be willing to just say "screw the ABI" and just fix it. Now, that doesn't mean that you should change ABI's on a whim, and regardless of any other issues, your user base is always important. But I don't think ABI's are, or should be, "sacred". For example, one thing git did early on was to just admit that some ABI's are horribly horribly bad. For example, the CVS "annotate" ABI is just a mistake, and trying to support that would just have held git back from realizing that you can be so much more. That may not be a "Application Binary Interface" kind of ABI, but it's an interface, and it's exactly the same thing - sometimes you just have to have the cajones to say "screw that, we'll be so much better if we can change the interface". Linus - : send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html