Skip to content

History of the project

Lekensteyn edited this page Jan 19, 2012 · 9 revisions

There is a lot confusion about this project (Bumblebee). This article contains a history of the Bumblebee concept and its development. It's meant for those who want to get a better understanding of this project and to have some confusion cleared.


The beginning

Optimus appears

NVIDIA Optimus, and its prequels, started to appear in late 2008 for the latests, early 2010 for the big one.

When talking of Optimus, the first thing to do is to describe what this it. And the best for that is the nVidia description of their own technology:

As the notebook industry continues to grow, consumers are trying to find the best compromise between battery life and performance. With the increasing popularity of HD media, gaming, and GPU powered applications, the number of GPUs included in notebooks continues to increase. While integrated graphics has historically delivered good battery life, it has failed to deliver the graphics and GPU performance end users demand. As a result, a few years ago NVIDIA developed a technology dubbed “switchable graphics” which allowed the end-user to choose which display adaptor would be used. In essence, this technology brought the best of both worlds, as it offered the battery life of an integrated graphics solution and the performance of a discrete GPU. Unfortunately, there were limitations to the technology resulting in the end user having to execute a fairly involved procedure to harness the most from the platform, resulting in only 1% of users ever switching between the two graphics systems. With NVIDIA‟s new Optimus technology, users can now experience the full performance benefits of a discrete GPU with the battery life of an integrated graphics solution. NVIDIA Optimus automatically, instantaneously, and seamlessly optimizes the notebook to offer the best performance or best battery life depending on the application. And it simply works.

... under Windows 7.

The first project started to support Optimus under Linux: Prime

Indeed, while many recent notebooks with a discrete nVidia card in it and an i3/i5/i7 processor use the nVidia Optimus technology to improve battery life, this software solution is unfortunately only available in Windows 7 and later.

So what was going on under Linux during this time?

In the beginning, there was nothing. People did not realize what kind of hardware they own and became frustrated why old installation methods did not work this time. Linux distributions have not been prepared for this and issues like broken 3D acceleration and lower resolution began to occur after installation of the nvidia driver. Some would even be left with a black screen.

So, nVidia Optimus users cried for a solution. Dave Airlie, nouveau and kernel developer, wrote an article on his blog, showing his first proof of concept of hybrid graphics working on Linux. He called his project Prime, which is the long term solution for supporting hybrid graphics under Linux. Due to the complexity of the problem, it won't shortly be ready for most users users (and now, in January 2012, it is estimated to be available in 2013).

This means that users were still unsatisfied and crying for a solution.

An end-users solution arrived to the Linux world

Then came Martin Juhl with a workaround which he named Prime-NG. Since it was not even remotely close to a real solution like Prime, he renamed it to bumblebee. The names Optimus, Prime, Bumblebee and Ironhide all come from the Transformer movie if anybody wonders.

The workaround (he called it a "solution", but we prefer to speak of a "workaround") was announced on the hybrid graphics mailing list and varying success had been reported.

The schism

The project pursued its developement and the user base grew. With this, the number of contributors increased as well. The project caught many attention after the famous rm -rf /usr bug which has been spread on Reddit.

Some new features appeared and an online database has been added to bumblebee, containing user-submitted configurations (and at a later stage, ACPI calls). Occasionally, users contributed to the code, and at some point, ArchangeGabriel and Lekensteyn have become more active than MrMEEE on the project. Samsagax has also always been there, and his position was the quite the same.

Because working in a repository on which only the owner (MrMEEE) can approve changes slows down development down and disagreements on the bad development practices of MrMEEE, a new approach is needed. ArchangeGabriel and Lekensteyn have setup a new project team (Bumblebee Project) in the end of July 2011. This team is focused on developing a stable and reliable version of Bumblebee with clear separation of a development and stable branch to avoid mistakes like removing an important folder.

A new start

The rebirth

We decided to rewrite the old MrMEEE/bumblebee codebase which contained some design flaws. We established a new development architecture, a managed organization and started to rewrite everything from scratch. During this process, we got rid of the online database. This allowed for a more secure, offline installation. MrMEEE decided not to take part in this project and instead removed support for distributions other than Ubuntu and continued with the name Ironhide. We continued with the name "Bumblebee", and use TBP/Bumblebee (TBP = The Bumblebee Project) to distinguish from the legacy MrMEEE/bumblebee project.

Unfortunately, this led to the belief that Bumblebee was dead and that Ironhide is better or even "deprecates" TBP/Bumblebee. Although the configuration database is quite horrible (it downloads unconfirmed scripts which can contain even malicious or incomplete code), it sometimes just "works". The Bumblebee Project team decided not to enable such a feature by default because we are focused on stability and do not want to give users a bad experience. A lot issues on https://github.com/MrMEEE/ironhide/issues are a result of misconfiguration of ACPI calls.

A floating support of power management

Initially, we've not provided support for power management using ACPI calls because of the risk on breaking a system and created a page explaining why ACPI calls have been removed and what risks were associated with wrong calls.

Possible side-effects of misconfigured ACPI calls are:

  • "FATAL: Error inserting nvidia_current (.../nvidia-current.ko): No such device" errors on loading the nvidia module
  • Hang during booting, shutdown or suspend
  • BIOS settings which appears to be modified
  • Other operating systems not recognizing the graphics card anymore

Below is a story which may make you understand better why we've removed ACPI call support. It has been copied from a conversation on #bumblebee on Freenode.

Lekensteyn

Okay, let's assume a building with dirty windows. You'd like to see more sun and therefore asks a worker to hire someone to get that job done. The worker has never learned how to clean a dirty window properly, but guess that a rock might be the right way to do it. He asks a kid to try cleaning the window with a rock. Now, different things may happen:

  • the window gets scratched and it even gets more darkly
  • the window breaks and nothing blocks the sun anymore

In the first case, it has gotten worse. That's the "Module not found" horror and suspend/ lock up issues. In the second case, you won't guess that something is wrong because you achieved your goal: the sunshine is better. Anyway, the right solution is obviously cleaning the window with a cloth but not before the window is repaired, which is our current task.

The ACPI call methods are rocks. The kid is just a messenger, the acpi_call module. That worker is the Bumblebee developer team.

Return of the Power Management

Starting with 2.4, we added back support for Power Management due to popular request and users who were sure that they had proper ACPI calls. At that time we haven't finished reading over 700 pages from the ACPI specification and therefore warned that we won't give any support if users experienced problem with it.

After some more research on ACPI, and thanks to the users submitting their ACPI tables, we gathered enough knowledge and information, so that Lekensteyn was able to create a new module superseding acpi_call: bbswitch.

And born again

At the same time, Samsagax started to rewrite the project in the C programming language which has more flexible and powerful features. This development (again targeted at security and stability) was took over by Thulinma who finished it and yielded a new version, Bumblebee 3.0 "Tumbleweed". The end result: better support that has ever existed for Optimus under Linux, with the key parts being automatic power management. The development of this program was done under the name "bumblebeed" which refers to the name of the daemon, hence the codename "Tumbleweed".

An end to the story ?

We've not been sitting down as you can see, and we're not going to do so now, because we still have a lot of things we want to put in Bumblebee: HDMI output support, VDPAU and alternatives backend, an graphical configuration interface, ...

This story will end one day with a matured release of PRIME in the Linux kernel and/or other technologies like Wayland providing support for Optimus which will make Bumblebee obsolete.

Afterword

While Ironhide is the work from one man (Martin) and receives no code review from other developers, the Bumblebee Project team has several developers using varying distributions. The main contributors (in random order) are:

  • Samsagax (Arch Linux + nouveau)
  • ArchangeGabriel (Ubuntu + nvidia)
  • Thulinma (new since Bumblebee 3.0, Mandriva + nvidia)
  • Lekensteyn (Ubuntu + nouveau)

Hopefully you now get a better overview of TBP/Bumblebee and the difference with Martins projects.

Acknowledgements

We would like to thank Martin Juhl for the initial release of bumblebee which gave us at least an idea how to get the NVIDIA card to work.

Clone this wiki locally