Das Problem ist einfach, dass früher Optimus durch einen Hardwaremultiplexer implementiert wurde. Er saß zwischen den GPUs und den Ausgängen. Man schickte ihm per ACPI oder proprietärer Lösung ein Kommando, woraufhin er die Ausgänge von der einen GPU zur anderen umschaltete. Im BIOS Optimus abzuschalten nagelte ihn auf einen fest.
Dann kam jemand auf die Idee, dass so eine Lösung ja Geld kostet und man es auch rein softwareseitig hinbekommen kann. Seitdem gibt es keinen Hardwaremultiplexer mehr, stattdessen nur noch einen gemeinsamen Framebuffer und ein wenig Softwaremagie. Die erste GPU (meist Intel) stellt den Framebuffer zur Verfügung, die zweite GPU rendert in ihn hinein.
Unter Windows ist der Hauptnachteil, dass man die erste GPU niemals vollständig abschalten kann. Außerdem müssen die beiden GPU-Treiber sich verstehen. Unter Linux klappt das ganz fluffig, solange man auf beiden Seiten freie Treiber hat. Blobs dürfen aus ideologischen Gründen den gemeinsamen Framebuffer und dessen Datenformat nicht nutzen. Mit Blobs - die man meist will, weil man sich den Spaß sonst auch gleich sparen könnte - bleibt daher nur die Entweder-Oder-Lösung, also X.org auf einer der beiden GPUs starten und sie ohne dynamisches Umschalten zu nutzen. Oft reicht das natürlich aus, gerade wenn man wie Ubuntu es einigermaßen elegant verscriptet hat. Dazu kommen so Frickellösungen wie Bumblebee. FreeBSD kann gar nichts davon, weshalb die zweite GPU zwar funktioniert, aber nichts ausgeben kann.