Jump to: navigation, search

Declare and infer functional equivalence between components or libraries

Revision as of 03:51, 27 December 2007 by Sonnyblack83.gmail.com (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

The number of components and libraries, along with their versions, makes practically impossible for a developer to know them all.

On the other hand, there may exist more than a piece of software accomplishing the same task, fulfilling the same requirements set, or even implementing the same specification. To some extent, such components could be considered functionally equivalent.

This is the case, for instance, of Hibernate , Apache Cayenne and all of the other frameworks implementing the Java Persistence API, or any implementation of the Java Servlet API, any JDBC driver, or any HTTP server (or client as well). The list would go a long way.

Furthermore, the equivalence is symmetrical, reflexive and transitive; the inference mechanism helps building relations upon social-generated contents: relations and functional equivalence among software components are both explicitly declared and inferred by the system, thus building a dense semantic network with a little effort.

Machine-readable metadata allow much more granularity and raise the formal level and the intelligence of search-related features.

Suppose the major JDBC drivers are already in the repository, and all were declared as equivalent to the PostgreSQL one. If a developer ships his own JDBC implementation (dummy-jdbc in the screenshot), and asserts it is "equivalent" to any of the JDBC drivers in the repository, this is what can be obtained by asking the system to find "functionally equivalent" components.


It can be noticed that the selected item is still there, which makes sense since everything is of course functionally equivalent to itself. Furthermore, it is worthwhile to note we only said the “dummy-jdbc” was equivalent to “mysql-jdbc”, while the rest is just the result of the reasoning process.