Yes, you are right, you can omit the "active" declaration.
I thought about this too. What happens atm if you unload/deactivate a Smack API extension bundle (experimental, extensions, legacy)? Does the deactivation fail/hang, e.g. because the ProviderManager still holds references to classes from the bundle?
That's a Java problem, you cannot destroy a reference that is hold by another object, that's why OSGi recommends interaction via services, but (like in our case) the creation of a technology independent solution often requires an interaction on object level. If we uninstall an extension, everything will still work, because the provider instances registered in the ProviderManager still exist. If we install the bundle again, the active methods registers new instances. In the deactivate method we must do all the cleanup necessary to create a state as if the bundle was never installed. The main task is to remove the registered instances hold by the ProviderManager. All other instances created must be notified to shutdown.