Inspired by one insightful correspondant, I've decided to develop a socioeconomic argument presenting solid reasons why NVIDIA and the company's customers would benefit from open, unobfuscated video drivers. This is a work in progress, so if you have a particular insight or objection, please contact me with your suggestions.
Intellectual Property Issues -- NVIDIA has invested a tremendous amount of time, money, and talent into developing its technologies. With register-level documentation, a competitor could reverse engineer the hardware and develop something similar. Given the advantage of research with only reverse engineering costs, said competitor could undercut NVIDIA strongly and still make a profit. (Expressed the other way, "We alone deserve the return on our R&D investments.")
Counterpoint:
Intellectual Property protection is important to the U.S. Government (the largest government with which I have personal experience) and the governments of other countries which have signed documents such as the Berne Convention. Much case law protects the right of inventors and innovators to profit from their discoveries.
That said, mechanisms such as patents and copyrights serve to make information publicly available -- yet still protected. Though I do not claim to deliver legal advice, a trade secret is only protected as long as it remains secret. As reverse engineering (especially clean room implementations) is legal and protected, trade secrets are in a precarious position.
In the case of NVIDIA and their obfuscated drivers and development kits, please note that even running code through a preprocessor has not stopped dedicated programmers from reverse engineering even the hardware registers! (As a side note, the obfuscation and preprocessing may be unfamiliar to some of my more business-minded readers. Briefly, a normal computer program may look something like this -- in pseudo code:
#define INPUTPORT 0x32 #define OUTPUTPORT 0x38 #define LENGTH_DATA 0x16 data structure shape_to_draw { string type_of_shape, number color_of_shape, coordinates position, number size }; function get_data (shape_to_draw) { read from(INPUTPORT) into shape; if (shape->size > LENGTH_DATA) { return ERROR; } } function write_data (OUTPUTPORT, shape_to_draw) { write to(OUTPUTPORT) shape_to_draw; if (ERROR) { return ERROR; } }Run through a preprocessor and maybe an obfuscator, you'll end up with something like this:
data structure aaXX { string aaXX1, number aaXX2, coordinates aaXX3, number aaXX4 }; function func0AB1 (aaXX_0157) { read from(0x32) into aaXX_0157; if (aaXX4 > 0x16) { return -1; } } function func0AB2 (aaXX_0158) { write to(0x38) aaXX_0158; if (readfrom(0x38a) == -1) { return -1; } }If you thought the first one was confusing, the second puts it to shame. Maybe 1% of the people who could read and understand the first one will actually give the second another glance. And they're doing it, and finding and fixing bugs in it!)
Even if that were not the case, many companies have offered lead developers of drivers and close-to-the-hardware projects detailed documentation under non-disclosure agreements. For examples, think of the XFree86 project. More appropriately, consider Darryl Strauss and 3dfx (note the phrase "full hardware documentation"), who worked together in relative secret for a while, until the company opened up its intellectual property to anyone. Under an NDA, the one or two people most intimately involved with the free software have access to useful information while the company retains legal protection of its prized secrets.
Licensed Intellectual Property Issues -- NVIDIA has presumably made business deals with other companies to use patented and trade secret technologies. Disclosing this information, even by accident, could result in huge legal penalties. It would also be a large job to go through internal documentation, sorting on which data could be opened to people who are not under the same non-disclosure agreements.
Counterpoint:
I know of no great counterargument, except to say that this may also be obviated by approaching lead developers with NDAs. Still, the type of information to which this may apply is likely to be something more along the lines of Macrovision protection for video output, or perhaps hardware implementation of the Content Scrambling System (to decrypt information stored on DVDs). As this is peripheral (pardon the pun) to the central components of the card (2D and 3D chipsets), it is not so highly valuable to driver authors.
Talent/Ability Issues -- if driver source code is publicly available, the potential exists for every would-be programmer capable of modifying source and running it through a compiler to flood the Internet with similar but subtly different variants of a driver. How would customers know which drivers are official and which are unofficial? Also, who could be a better programmer than those already employed by NVIDIA? They have access to all specifications, experience with the hardware and software, and jobs dedicated to writing the drivers.
Counterpoint
Contrary to this view, excellent programmers do exist -- most of them not working for NVIDIA. (To be fair, I am certain there are excellent programmers working at NVIDIA. It's just that they can't afford to hire all of the graphics wizards in the world.) Many even work on free software projects -- the Linux Kernel, Apache, or even Utah-GLX. Would you believe that John Carmack (programmer behind Quake 2, one of the most widely used 3D performance benchmarking applications in the PC world today) is actually working on free video drivers? Who would you rather have writing your driver? A programmer, unknown to the world at large, who may have been with the company for ten years or who may have been hired last month, coding to meet a deadline and to earn a paycheck, or the man who continues to set the bar for 3D engines, coding for the fun of it with his work available for the world to see? (How long would he keep his reputation if his code were full of cruft and baggage?)
Even if fifty different people break off their own code trees and begin to make wildly divergent versions from the same source, it won't take too long for everyone else to look around and figure out which works the best. People who are used to open software soon learn which projects are being updated regularly and which projects deserve a quick death. As the brightest and best programmers are focused on the same thing, namely the best possible 2D and 3D support for the chipset, they have a strong peer pressure to integrate the best features of all competitors. (A license such as the GPL, which requires that modifications made by licensees be made available would do well to enforce this.)
Support and Marketing Issues -- following the previous lines of thought, if free drivers do split and fragment, will NVIDIA be responsible for bugs introduced by well-meaning but incompetent amateur programmers? If 80% of NVIDIA Linux and *BSD users use a heavily modified driver which cuts performance in half, will this reflect badly upon the hardware (which could perform much better with proper drivers)? Will vendors have to recruit and train support staffs to deal with the influx of questions from the users of operating systems with less-than-90% desktop market share? (This may be a larger issue with NVIDIA than previously thought.)
Counterpoint:
As in the previous argument, the availability and often high quality of free software programmers makes alternate channels of support viable. (The Utah-GLX project has a publicly available mailing list dedicated to users of the software. Browse the archives to see that many of the programmers themselves answer questions. When was the last time you talked to a driver programmer at a traditional hardware company with a support question?)
Besides that, the performance of the free driver is many times better than that of the NVIDIA driver for my card. I can actually play Quake 2 without having to cold-reboot my Linux machine. (The performance of Matrox cards is still superior to that of the TNT2, though I understand the situation is reversed under Windows. If I were NVIDIA, I would be more concerned that their widely acknowledged superior performance is actually hampered by their support for Linux and other free operating systems.) Questions of ideological preference aside, if you want the best 3D performance under Linux, most people in the know will point you at the Matrox G400 card. A recent Linuxgames article also pointed out that the latest 3dfx cards are an excellent choice. Note that NVIDIA is conspicuously absent from the benchmarks.Disclaimer: Linuxgames posted their article before I created this analysis page. They may be linking here now, however.
Market Segment Issues -- if 90% of desktop computer users use some variant of Windows, why not target that group? Is the alternative operating system market large enough to justify support costs, or is the projected rate of return so small that it is not worth it?
Counterpoint
Market segment is an important gauge of demand, and must be taken into account. While Windows does enjoy its place on the vast majority of desktop machines, consider a few facts. First and foremost, NVIDIA does not limit itself to the Windows 9x family, as do many other hardware manufacturers. They even provide a TNT driver for Windows 3.11! Is the market for high-quality 3D performance under Windows for Workgroups larger than that of Linux or *BSD? I cannot seriously believe that.
Second, many successful companies like to target emerging markets. It is shortsighted to say that, "Because 75% (or whatever) of all home Internet users are in the United States, there is no market for home Internet access in South America or Asia." That is the exact opposite of a successful business strategy. The market share for Linux is growing, especially on the desktop -- with groups like KDE and GNOME and the Helix project! This growth will come at the expense of Windows. Third, as demonstrated above, dedicated and talented programmers will write their own drivers for their own operating systems as hobbies -- whether that OS is Be, Linux, GNU/Hurd, OpenBSD, or Plan9. (Okay, maybe not Plan9, but why not?) Should a hardware company dictate that its customers only use its product in a certain fashion? Would you buy a car if you had to sign an agreement saying that you could only purchase fuel at a certain type of service station?An astute reader also noted that the growing power of consumer grade 3D cards is beginning to make inroads into commercial grade systems. As large-scale render farms composed of clustered x86 boxes become more practical than specialized and exotic hardware, the GeForce, for example, suddenly becomes a viable solution on a graphics developer's personal workstation. This mindshare could be available at a very small price... but if supporting Windows 3.11 on a Pentium-class machine is more important than allowing dedicated customers access to information to write their own drivers for Alpha machines running a highly-tuned X server, perhaps even that price is too high.
One might also note that, while these companies may not buy into the free software traditions and beliefs, they will hire system administrators familiar with Linux and open soure software. As this market is potentially very lucrative, maintaining favor with these potential purchasers is a fiscally wise investment.Market Leader Issues
Counterpoint:
Leading the market is one thing. Arrogance is another. Saying "We are the greatest thing right now, so we get to make the rules" is a good way to lose your customers. Remember, these are only people buying your products. People are irrational sometimes, pesky, irritable, annoying, and easily offended. They are also easily pleased. Treat them right and they will be more than happy to buy your products, if they are good and if they are what you promised.
This is vitally important when it comes to customer loyalty issues. As evidenced by the multitude of sites dedicated to providing the cold, hard benchmarking numbers (including information on tweaking your registry, recompiling your kernel, running Quake in place of a window manager, and using the latest bleeding-edge drivers from CVS), the consumer 3D business is very cutthroat. Currently NVIDIA is riding high on a wave of excellent performance. What happens when 3dfx, or Matrox, or ATI comes out with a next generation card that does geometry transformation on a Celeron 300A and gets 80 fps in 1600x1200 while running at 30 degrees C? Happy customers will be more likely to stick with a vendor giving good support, even at the expense of a few frames per second. (There will always be a group that is impossible to please -- but why not try for 80%? And 80% of Windows users is still less than 80% of Windows users plus Linux users plus BeOS users plus FreeBSD users plus....)
Happy customers stick around. Very few of us have the time, money, or inclination to purchase the latest and greatest video card every month. So what if a competitor comes out with one in March, and our vendor will have one available in April? Happy customers are willing to wait. (Customers who have to wait from August until, well, it's April now, for good drivers aren't going to be happy.)
Certification Issues -- OpenGL certification cannot chase the moving target of a constantly changing source code release. This certification is important for vendors and professional end users who rely on guaranteed hardware and software solutions for compliance with their applications.
Counterpoint:
Nothing would prevent NVIDIA from bundling certified binary software with certified hardware to customers desiring SGI-certified OpenGL compliant packages. This binary could even be a compiled version of the open source code! Certification provides a validation of a particular implementation of the standard. By no means does this require that the source be closed. For example, the Mesa3D project (providing a graphics library so similar to OpenGL that it functions as a direct replacement on many Unix systems) is undergoing conformance testing though it is under active development.
Those of us who wish to recompile from source code (whether plain-vanilla downloaded from an FTP site or patched for feature enhancements, performance improvements, and bugfixes) would have functionally identical drivers to those which are certified. (One might also mention that having a commercial company pay for the compliance testing and certification -- a large expense -- for Linux drivers would likely open the Linux market for that vendor's merchandise as the platform suddenly becomes more accessible to lucrative professional graphics industries, as well as generating much positive favor for the company.)
NVIDIA has publicly stated that they support Linux -- to the point of releasing some driver code. (The first link is old, as it still mentions the presumably scrapped NVIDIA XFree86 4.0 DRI-enabled driver.)In addition, there are benefits beyond answering the points above:
Developers, equipped with the same source (or better yet, hardware specs), could produce DRI drivers which work on multiple platforms. (They are likely to do this anyway.)
Why should people listen to NVIDIA? They've earned respect for their impressive 3D hardware and have said the right words about supporting Linux, leading many people to purchase their harware. (You will note that companies like Matrox, 3dfx, and ATI don't say as much, but have recently released documentation and specifications.) Respect is the coin of the realm in the free software community. Actions carry a thousand times the weight of words, and good code is respected very highly.
Now the XFree86 4.0 binary loading mechanism (provided by Metrowerks) may alleviate this somewhat -- especially as XFree is by no means limited to the Linux OS, but what of AGP support (requiring the agpart kernel module on Linux), or DMA? With source code, I can produce a binary tweaked for my particular system and architecture, instead of something targeting a greatest common factor of x86 Linux. Why exclude anyone who wants to buy your product?
Your competitors have embraced the future, NVIDIA. Will you do the same?