NVIDIA has announced the open source of all kernel modules supplied in its proprietary video driver suite. The code is open source under MIT and GPLv2 licenses. The ability to build modules is provided for the x86_64 and aarch64 architectures on systems with the Linux 3.10 kernel and newer releases. Firmware and user-space libraries such as the CUDA, OpenGL, and Vulkan stacks remain proprietary.
It is expected that the publication of the code will lead to a significant increase in the usability of NVIDIA GPUs on Linux systems, enhance integration with the operating system, and simplify the delivery of drivers and debugging problems. Ubuntu and SUSE developers have already announced the formation of packages based on open modules. Having open modules will also make it easier to integrate NVIDIA drivers with systems based on non-standard custom builds of the Linux kernel. For NVIDIA, open source will improve the quality and security of Linux drivers through greater community engagement and the ability for third-party review and independent audits.
It is noted that the presented open code base is simultaneously used in the formation of proprietary drivers, in particular, it is used in published the beta branch 515.43.04 . In this case, the closed repository is primary, and the proposed open codebase will be updated for each release of proprietary drivers in the form of a cast after certain processing and cleaning. The history of individual changes is not provided, only the overall commit for each version of the driver (modules code for driver 515.43.04 is currently published).
However, community representatives are given the opportunity to send pull requests to promote their fixes and changes to the module code, but these changes will not be reflected as separate changes in the open repository, but will first be integrated into the main closed repository and only then transferred with the rest changes to open. Participation in the development requires the signing of an agreement on the transfer of property rights to the transferred code to NVIDIA (Contributor License Agreement).
The kernel module code is divided into two parts: common components not tied to the operating system and a layer for interacting with the Linux kernel. To reduce installation time, common components are still delivered in proprietary NVIDIA drivers in the form of an already assembled binary file, and the layer is assembled on each system, taking into account the current kernel version and available settings. The following kernel modules are offered: nvidia.ko, nvidia-drm.ko (Direct Rendering Manager), nvidia-modeset.ko, and nvidia-uvm.ko (Unified Video Memory).
Support for the GeForce series and workstation GPUs is rated as alpha quality, but NVIDIA Turing and NVIDIA Ampere architecture-based dedicated GPUs used in the Data Center for Data Acceleration and Parallel Computing (CUDA) are fully supported, fully tested and suitable for use in production projects (open source is already ready to replace proprietary drivers). Stabilization of GeForce and GPU support for workstations is planned for future releases. Ultimately, the level of stability of the open code base will be brought to the state of proprietary drivers.
In its current form, the inclusion of published modules in the main kernel is not possible, since they do not meet the requirements of the kernel for coding style and architecture conventions, but NVIDIA intends to work together with Canonical, Red Hat and SUSE to resolve this issue and stabilize the driver programming interfaces. In addition, the published code can be used to improve the core open-source Nouveau driver, which uses the same GPU firmware as the proprietary driver.