The future of third-party driver installation

Registered by Jason Warner

We have had Jockey for quite a while now to perform the installation
of proprietary (e. g. NVidia), alternative (e. g. fglrx vs.
fglrx-updates), third-party (e. g. from openprinting.org) drivers.

However, I feel that this needs some refreshing:

 * The code base of Jockey is quite complex, it was meant for a lot
  more stuff than we are actually using it for. We also came up with
  simpler ways of mapping hardware to packages, mostly with
  additional tags in the apt package lists. We also have a more
  upstream friendly API in PackageKit/aptdaemon now to do this kind
  of thing.

  We can simplify the jockey code base and backend logic a lot (up
  to the extend of completely dropping it) by making full use of
  above new technologies and dropping the extra features we don't
  use. The exception is the openprinting.org detection, but that
  could go into system-config-printer or python-cups directly.

 * We install some drivers (like Broadcom wifi) straight from Ubiquity
  now, which certainly makes sense for devices where there is no free
  alternative. For the others (e. g. NVidia) we pop up a notification
  and offer to install them. I'd like to walk through the current UI
  and discuss how this could be made more steamlined and less
  confusing (e. g. for NVidia it can potentially offer 6 different
  drivers for you!)

 * We might consider merging the jockey UI functionality, which is
  mostly a shallow GUI around "install that package" now) into
  software-center, control-center, or something similar to the codec
  installer. I'd again appreciate if someone from the design team
  could participate in that (hello Matthew!).

Blueprint information

Status:
Complete
Approver:
Sebastien Bacher
Priority:
High
Drafter:
Martin Pitt
Direction:
Approved
Assignee:
Martin Pitt
Definition:
Approved
Series goal:
Accepted for quantal
Implementation:
Implemented
Milestone target:
milestone icon quantal-alpha-3
Started by
Martin Pitt
Completed by
Kate Stewart

Whiteboard

UI redesign: (draft)
- https://wiki.ubuntu.com/SoftwareAndUpdatesSettings#drivers

Code/package design:
- Remove the backend/selection logic and move to the packagekit plugin API; we need the "printer drivers from openprinting.org" logic moved into s-c-p
- Move UI into software-properties, as in above redesign
- Keep current handling on hybrid systems, i. e. don't offer NVidia, but do offer fglrx as it works with some cards
- New ubuntu-drivers-common package == PackageKit/aptdaemon plugin plus driver detection plus nvidia/fglrx specific logic plus current nvidia-common bits
- openprinting.org driver lookup should move directly into system-config-printer; s-c-p already initiates the lookup (currently calling Jockey), and Jockey in turn uses s-c-p API (python-cupshelpers) to do the actual lookup; cut the middle man and just call p-cupshelpers
- s-c-p should use the PackageKit API to install repositories and packages from openprinting.org; aptdaemon will implement the necessary compat API

Please see /usr/share/doc/ubuntu-drivers-common/README.gz for an intro and the various APIs that ubuntu-drivers-common provides.

http://people.canonical.com/~pitti/scripts/install-printerdriver-gi.py is an example how to use PackageKit to add a repository and install a driver using the upstream friendly PackageKit API, so that this can go into s-c-p itself.

(?)

Work Items

Work items:
[mpt] Design for devices where you've manually installed a driver when a packaged version is available <https://wiki.ubuntu.com/SoftwareAndUpdatesSettings?action=diff&rev2=16&rev1=15>: DONE
[mpt] Change color-coding so that green = whichever driver was tested with the Ubuntu release <https://wiki.ubuntu.com/SoftwareAndUpdatesSettings?action=diff&rev2=13&rev1=12>: DONE
[mpt] add "3-D graphics" to the installer's third-party software text (ubiquity can detect whether nvidia card is in the system) <https://code.launchpad.net/~mpt/ubiquity/3d-graphics-text>: DONE
[mpt] Get legal review of the installer's third-party software paragraph for posible shortening <https://code.launchpad.net/~mpt/ubiquity/3d-graphics-text/+merge/110565>: DONE
[albertomilone] ensure that the packaged nvidia driver removes an user-installed nvidia upstream driver: TODO
[albertomilone] ensure that installing nvidia/fglrx driver package also updates the alternatives symlinks and updates initramfs for the changed blacklists: DONE
[albertomilone] port the libraries in nvidia-common and the test suite to python 3.x: DONE
[ogra] Add Modaliases: header to pvr-omap4 package (ask tseliot/pitti about how to do that); if omapdrm_pvr does not use modaliases, add special case to ubuntu-drivers-common: DONE
[albertomilone] Ensure that only one nvidia/fglrx driver version can be installed by default, so that the alternatives are configured correctly automatically: TODO
[pitti] add Modaliases: header to linux-firmware-nonfree, to get rid of the dvb-usb special case: DONE
[pitti] drop -C option/logic; the free drivers have provided compositing support for years: DONE
[pitti] rename nvidia-common to ubuntu-drivers-common: DONE
[pitti] aptdaemon/packagekit plugin for what-provides modalias in u-d-comon: DONE
[pitti] put driver detection API into u-d-common: DONE
[pitti] add ubuntu-drivers script (similar to "jockey-text --auto-install"-) script to u-drivers-common for Ubiquity: DONE
[pitti] Add open-vm-dkms special case to u-d-common: DONE
[pitti] handle blacklisting of nvidia on hybrid systems: DONE
[pitti] Add sl-modem-daemon special case to u-d-common: DONE
[pitti] drop update-notifier hack for DVB-usb firmware and use g-s-d's: DONE
[pitti] Move ubiquity from jockey to ubuntu-drivers: DONE
[pitti] Implement repo_enable PackageKit API in aptdaemon, for getting drivers from openprinting.org: DONE
[pitti] Implement install_signature PackageKit API in aptdaemon, for getting drivers from openprinting.org: DONE
[pitti] Drop jockey-gtk from seeds: DONE
[pitti] Discuss future of jockey-kde and moving of Kubuntu to u-d-common: DONE
[cyphermox] implement the new UI design for drivers from mpt: DONE
[didrocks] finish the implementation of the new UI design: DONE
[tkamppeter] move openprinting.org driver lookup logic from Jockey into s-c-p: TODO
[tkamppeter] implement openprinting.org driver installation in s-c-p through PackageKit API (with help from pitti): TODO