Hi Freemon,
The start() must return as soon as possible, as the framework is locked waiting for the bundle to initialize.
This ensures that two bundles can't start in different threads, avoiding multiple concurrency risks.
If the start() tasks needs a long time to run, or even are blocking, they should be executed in a new thread, started in the start() method and possibly stopped/joined in the stop() method.
In fact, this is a standard behavior in OSGi applications.
If you require to run the code in the main thread (like a UI thread), you should take a look at the "loopers" in the Cohorte project ([1] and [2]).
It starts a loop [1] waiting for tasks to run in the main thread while starting the framework in a new thread [2].
Else, you simply have to create a thread in the start() method and return immediately.
Cheers,