Without Backward Compatibility
←Older revision | Revision as of 04:41, 3 January 2019 | ||
Line 7: | Line 7: | ||
The more incompatibility we put into our libraries, the more harder it will be to compose our systems, so various versions of each library can co-exist. Each incompatible library version adds additional variable to the [[wikipedia::3SAT]] problem. Things are not that bad when we have just a limited set of incompatible libraries, but if the number grow - then finding working configuration of an application might almost solve quite complex [[wikipedia::3SAT]] problems. Something that is know to be really hard. | The more incompatibility we put into our libraries, the more harder it will be to compose our systems, so various versions of each library can co-exist. Each incompatible library version adds additional variable to the [[wikipedia::3SAT]] problem. Things are not that bad when we have just a limited set of incompatible libraries, but if the number grow - then finding working configuration of an application might almost solve quite complex [[wikipedia::3SAT]] problems. Something that is know to be really hard. | ||
- | Symptoms of such problems are more common in libraries that are not yet popular enough. Their developers may not yet be trained in keeping backward compatibility. However the more popular your library becomes the more you will care. As a result often used libraries are developed in compatible way. Finding whether module dependencies can be satisfied in a repository with only compatible versions is obviously trivial | + | Symptoms of such problems are more common in libraries that are not yet popular enough. Their developers may not yet be trained in keeping backward compatibility. However the more popular your library becomes the more you will care. As a result often used libraries are developed in compatible way. Finding whether module dependencies can be satisfied in a repository with only compatible versions is obviously trivial: just take the newest version of each! |
- | + | Yet imagine glibc developers going mad and publishing an incompatible version. That library is used by everyone. Yet everyone is operating on different schedule. Slowly the other libraries would migrate to the new version. Your app may use hundreds of such libraries. Selecting the right versions that actually work together creates quite a lot of NP-complete problems to solve. | |
- | Thus the [[LibraryReExportIsNPComplete|NP-Complete nature of library versioning problem]] can also be seen as an advertisement for importance of [[BackwardCompatibility]]. While we keep it, we live in a simple world, as soon as we start to release [[Big Bang]] incompatible revisions, we'll encounter the | + | Thus the [[LibraryReExportIsNPComplete|NP-Complete nature of library versioning problem]] can also be seen as an advertisement for importance of [[BackwardCompatibility]]. While we keep it, we live in a simple world, as soon as we start to release [[Big Bang]] incompatible revisions, we'll encounter the complexity. |
== Types of Compatibility == | == Types of Compatibility == |