<p><code>OFRunLoop</code> currently always uses <code>OFKernelEventObserver</code> if ObjFW is compiled with support for sockets and <code>OFKernelEventObserver</code> initializes the network in its <code>+[initialize]</code>. On some systems (e.g. Wii), initializing the network takes quite a while, resulting in quite a lengthy startup time when the main run loop is initialized.</p>

<p>It would be much better to only initialize <code>OFKernelEventObserver</code> once a socket is added to the run loop, and always fall back to using conditions until a socket is added. At which point sockets are already initialized anyway and <code>select()</code> and similar are available.</p>

<p>This could even be improved further on some systems by asynchronously initializing sockets: Sockets initialization could be started asynchronously early on, and the synchronous sockets initialization used by many classes could then just wait for the async initialization to be done. This would allow to have all non-socket code running without delay, and possibly sockets already being initialized by the time the application wants to use them, instead of only starting initialization once the application wants to use sockets.</p>