> > Since we're on the subject, I also want to say a few words about
> > upstreaming VMware's kernel modules. In general we're getting more and
> > more comfortable about upstreaming as some of us have been socializing
> > the idea within the company. I think the remaining obstacle is this
> > idea that once our code is upstream, we are no longer acting as the
> > distributor, which means we can no longer control its destiny. We've
> > shipped out-of-tree modules for years now and have grown accustomed to
> > the control that this gives us; among other things, we can do things
> > like release updated modules simultaneously with our products, or make
> > whatever changes we want regardless of how locked down the affected
> > distros might be (for example, we can add a new feature to a module
> > intended for a distro that's been declared end-of-life by its vendor).
> > It's very difficult to cede this control once you've enjoyed it for
> > many product releases, which is partly why progress has been slow. To
> > mitigate this problem, we're trying to understand whether, after
> > upstreaming, we can gain some control back by working more closely
> > with distros so that new features or changes that are important to us
> > can be backported into existing distro releases in time for, say, a
> > VMware product release. I don't have any details to share yet, but I'm
> > sure either Ragavan or myself will say more about this in the near
> > future.
> 
> I don't see why you can't continue to still ship your drivers
> out-of-tree just fine, as you do today, if the code is also in the
> kernel tree as well.
> 
> Why do you think this is somehow "giving up control"?  How does this
> prevent you from still providing specific modules for specific distros,
> pre-build and ready to go?
> 
> Overall, it will end up saving you engineering time and effort if your
> code gets into the tree, as 75% of your driver lines of code will go
> away (no need for the multiple layers of indirection to handle zillions
> of kernel versions.)
> 
> If you look around, this works just fine for almost all hardware
> vendors, so it's not like this is a new model of doing work or anything
> :)

I'm not sure I see exactly how this will work out as painlessly as you say, so 
let me describe my understanding of the situation and you can correct my 
mistakes.

Let's suppose we want to continue to ship out-of-tree as well as in-tree 
drivers. The in-tree drivers are live in a single upstream codebase. This 
codebase can only produce working drivers for the kernel it ships. The 
out-of-tree drivers live in a single "downstream" codebase littered with 
compatibility wrappers as we do today. This codebase can be compiled for 
virtually any kernel, provided we continue to chase down all kernel API changes 
and wrap them.

Distros will periodically snapshot the upstream kernel and ship some version of 
our drivers. Additionally, we will periodically snapshot our downstream source 
and ship a large number of prebuilt drivers and the source itself as part of 
the VMware Tools, as we do today. Any given VM may or may not have some version 
of the drivers provided by the distro itself. When installing VMware Tools, our 
installer will need to choose whether to install the drivers we provide, or to 
depend on the drivers already found on the system. Some of this logic already 
exists in our installer today and we can extend it to check the versions of the 
drivers to make decisions like these, or we can ship dkms in our installer and 
use it to do this work. Also, it's not enough that these decisions be made when 
installing or upgrading VMware Tools; they also need to be made when the 
distro's kernel is upgraded. Again, this is something that dkms can do at 
boot-time.

With this system in place, VMware is in a position to provide driver updates as 
it sees fit via the VMware Tools, and to deliver drivers via upstream for the 
best possible out-of-the-box experience. However, we've paid some high prices 
to get here:
1) All of our prebuilt driver infrastructure must live on and we must continue 
to add the latest distros as they are released.
2) We must maintain a separate "downstream" codebase which will continually 
subject us to API chasing headaches.
3) The "downstream" codebase is essentially a fork of the upstream codebase, so 
merging changes between the two is painful.
4) There are quite a few moving parts on the user's system tasked with making 
sure the user has the latest drivers, either from VMware or from the distro. 
The more complicated the system, the more fragile it will be.
5) The "downstream" codebase is released on VMware's product release schedule. 
Since it is distro-independent, each of its releases will need to be tested 
against each distro release. This is a sizable m by n testing matrix.

So, what am I missing?


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
open-vm-tools-devel mailing list
open-vm-tools-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open-vm-tools-devel

Reply via email to