What is an implementation dependency and what/how/when should I use one?
Normally modules interact with one another using public packages: a module can (indeed, must) declare which, if any, of its Java packages are intended to be visible to other modules. When you declare a specification dependency on another module, you only get access to the public packages. This kind of dependency looks like this in the manifest: OpenIDE-Module-Module-Dependencies: some.other.module > 1.5 (requesting version 1.5 or greater of some.other.module) or like this: OpenIDE-Module-Module-Dependencies: some.other.module (requesting any version; not recommended). Occasionally you may find that the author of a module neglected to expose certain classes in public packages which you know (from reading the source code) that you need to use and know how to use properly. The classes are public but not in declared public packages. It is possible to access these classes if you really have to. But you need to declare a dependency on that exact version of the other module, since such classe