LWN: Comments on "Quote of the week" https://lwn.net/Articles/186609/ This is a special feed containing comments posted to the individual LWN article titled "Quote of the week". en-us Mon, 01 Sep 2025 11:51:30 +0000 Mon, 01 Sep 2025 11:51:30 +0000 https://www.rssboard.org/rss-specification lwn@lwn.net benefits of out-of-tree development https://lwn.net/Articles/188231/ https://lwn.net/Articles/188231/ efexis <font class="QuotedText">&gt; this is in the developers' interest (and hell, it's their project),</font><br> <font class="QuotedText">&gt; but I doubt that it is actually optimal for the community as a whole</font><br> <p> Of cause it is; a happy developer is a productive developer :-D<br> <p> And I have to say, if I wanna test (or begin actually using) some obscure piece of hardware (in my case, this is usually when I'm adding rare/random/old/spare network cards to my router box), I /like/ the fact that drivers are all there, and that I don't have to hunt around for a driver online somewhere that probably won't compile with recent kernel versions, even if it does mean I'm not using a 10th of the code in the kernel tarball.<br> <p> I bet the % of in-kernel drivers that *at least* compile is significantly higher than the out-of-tree tarballs you'll find lying around the net for hardware that never made it into the tree, and most of the stuff that doesn't work is probably more down to API changes that haven't been kept up with than anything else. In-kernel is definitely the way to go.<br> Sun, 18 Jun 2006 00:31:58 +0000 benefits of out-of-tree development https://lwn.net/Articles/187441/ https://lwn.net/Articles/187441/ wilck <font class="QuotedText">&gt; If there are only two users...</font><br> <p> I was assuming the number "2" had been used symbolically in this discussion, not literally. Frankly, with literally 2 users code wouldn't go into the kernel unless one of the users was Linus, would it?<br> <p> <font class="QuotedText">&gt; If this wireless development had been done __in kernel__</font><br> <p> Certainly. You are talking about a subsystem/general framework here. _Of course_ it must be developed in the kernel.<br> <p> <font class="QuotedText">&gt; That's why the kernel ships with a file called</font><br> <font class="QuotedText">&gt; "Documentation/stable-api-nonsense.txt" -- expressly for the purpose of</font><br> <font class="QuotedText">&gt; pointing this out to people, to try to make this dead horse go the hell</font><br> <font class="QuotedText">&gt; away.</font><br> <p> I have deep respect for the kernel hackers, and GregKH specifically, but that document misses their usual standards. Between the lines, I am just reading "we don't wont any restrictions of creativity, and have been digging around for arguments that all else is bad". I understand very well that this is in the developers' interest (and hell, it's their project), but I doubt that it is actually optimal for the community as a whole.<br> <p> <font class="QuotedText">&gt; Lastly, my interpretation of in-kernel development means that primary</font><br> <font class="QuotedText">&gt; distribution of the source code happens as part of the kernel tarball. </font><br> <p> That leaves me puzzled. How many drivers are out there whose latest version is part of the tarball? Wouldn't that apply only to "vintage hardware" drivers, which are not under active devlopement by themselves?<br> <p> Tue, 13 Jun 2006 09:58:10 +0000 benefits of out-of-tree development https://lwn.net/Articles/187308/ https://lwn.net/Articles/187308/ cventers <font class="QuotedText">&gt; Yes I do. I think that every piece of code is bad off without active</font><br> <font class="QuotedText">&gt; maintainer, whether or not it's in-kernel. Common Open-Source wisdom</font><br> <font class="QuotedText">&gt; says that a useful piece of code will find a new maintainer sooner or</font><br> <font class="QuotedText">&gt; later, anyway.</font><br> <p> I just don't get it - which of the two users of these drivers we've been <br> discussing do you suppose will be troubled to maintain it across kernel <br> API changes? You can call it bad off if you like, but it's better for the <br> code to be in kernel where it will _always_ at least build than out of <br> kernel where it will almost surely go stale.<br> <p> The wisdom you speak of really applies to things that are useful to lots <br> of people. If there are only two users, and the code is out of tree, it <br> is very likely to die and die quickly.<br> <p> <font class="QuotedText">&gt; I meant "in theory" wrt Linux system operation. In most cases I am</font><br> <font class="QuotedText">&gt; aware of, installation of a system with recent hardware still requires</font><br> <font class="QuotedText">&gt; external drivers, NVidia/ATI not being counted.</font><br> <p> Toss NVIDIA and ATI for the obvious licensing issues, and the only thing <br> I see that is 'common' is wireless. This is largely because wireless <br> development was done by many parties, in parallel, __outside__ of the <br> kernel. So you end up with multiple competing stacks and implementations, <br> and it was only recently when John Linville volunteered to take <br> maintainership over kernel Wifi support that we've started to see any <br> improvements here.<br> <p> If this wireless development had been done __in kernel__, as all driver <br> development should be, the situation would be _MUCH_ better today since <br> all of Linux's wireless support would be available from mainline (save <br> for the ndiswrapper hack).<br> <p> <font class="QuotedText">&gt; So should you. I find it pretty obvious that a distributed development</font><br> <font class="QuotedText">&gt; model scales better than a one-big-chunk model.</font><br> <p> But that's just it -- the Linux kernel model _is_ distributed where it <br> matters (anyone can work on anything). The irony is that the only way to <br> make this work is either a stable API (which sucks, more on this later) <br> or pushing as many things in-core as possible (as Greg KH points out <br> clearly in Documentation/stable-api-nonsense.txt).<br> <p> <font class="QuotedText">&gt; I did, many times. I don't agree with it. It's fine for the ABI part,</font><br> <font class="QuotedText">&gt; but not for API part. The API needs to be predictable. That doesn't</font><br> <font class="QuotedText">&gt; mean standstill, just a bit of respect for those developers who don't</font><br> <font class="QuotedText">&gt; belong to the kernel community.</font><br> <p> Sorry, this just isn't the way Linux kernel development is done. This <br> issue has been beaten to death over and over on LKML and in other <br> channels. And quite frankly, the people that are most qualified to make <br> this call are the people who work on the kernel all day, every day. These <br> people almost (completely?) universally agree that a stable API is a bad <br> thing. That's why the kernel ships with a file called <br> "Documentation/stable-api-nonsense.txt" -- expressly for the purpose of <br> pointing this out to people, to try to make this dead horse go the hell <br> away.<br> <p> <font class="QuotedText">&gt; "Rate of change" is not a value per se. The one important criterion for</font><br> <font class="QuotedText">&gt; the usefulnes of a development model is whether it benefits users. For</font><br> <font class="QuotedText">&gt; that to happen, other (non-kernel) communities must take time to adapt</font><br> <font class="QuotedText">&gt; to the new features and use them, and users must learn how to take</font><br> <font class="QuotedText">&gt; profit from them. I am not sure if the current model was primarily</font><br> <font class="QuotedText">&gt; designed with user benefit that in mind, or rather kernel developer fun</font><br> <font class="QuotedText">&gt; (which would be understandable).</font><br> <p> Rate of change is not a tangiable end-user value in and of itself. What <br> it means is more about /flexibility/ - if I want to make a sweeping <br> change to the kernel, what are the costs? Having everything in-kernel <br> means that I can propose a new API, and following good review, replace <br> the API and all of the users in one big sweep. Imagine how difficult it <br> would be to get big patchsets like Ingo's lock validator merged if it <br> were going to scream about all kinds of third party code users depended <br> on?<br> <p> Lastly, my interpretation of in-kernel development means that primary <br> distribution of the source code happens as part of the kernel tarball. <br> That means that everyone working on Linux has the same code the users do, <br> which further means that any API changes they decide to adopt can be <br> rapidly applied to the whole kernel. (Not to mention, build regressions <br> are going to be _immediately_ obvious rather than becoming a huge <br> surprise after a major release).<br> <p> There isn't a big distinction in what you are considering the <br> possibilities for 'in-kernel' -- pretty much everyone has a git tree that <br> they develop on and push changes upstream.<br> <p> If someone doesn't want to use git, they're free to use patch and send <br> e-mail. Git need not be a part of this arrangement.<br> Mon, 12 Jun 2006 18:51:16 +0000 benefits of out-of-tree development https://lwn.net/Articles/187157/ https://lwn.net/Articles/187157/ wilck <blockquote><em>Ah, but once again, you're presuming this external maintainer _exists_.</em></blockquote> <p>Yes I do. I think that every piece of code is bad off without active maintainer, whether or not it's in-kernel. Common Open-Source wisdom says that a useful piece of code will find a new maintainer sooner or later, anyway. <blockquote><em>This is not theory, this is the reality of how the kernel _is done today</em></blockquote> <p>I meant "in theory" wrt Linux system operation. In most cases I am aware of, installation of a system with recent hardware still requires external drivers, NVidia/ATI not being counted. <blockquote><em>You have to carry your argument out a little bit to see its consequences.</em></blockquote> <p>So should you. I find it pretty obvious that a distributed development model scales better than a one-big-chunk model. <p>The "hit by a bus" argument bears no relation to in-kernel or out-of-kernel. Note that I'm not talking about closed-source stuff. <blockquote><em>Read Documentation/stable-api-nonsense.txt. </em></blockquote> <p>I did, many times. I don't agree with it. It's fine for the ABI part, but not for API part. The API needs to be predictable. That doesn't mean standstill, just a bit of respect for those developers who don't belong to the kernel community. <blockquote><em>Without the current model, the rapid rate of change and evolution in the kernel would not be possible at all.</em></blockquote> <p>"Rate of change" is not a value <em>per se</em>. The one important criterion for the usefulnes of a development model is whether it benefits users. For that to happen, other (non-kernel) communities must take time to adapt to the new features and use them, and users must learn how to take profit from them. I am not sure if the current model was primarily designed with user benefit that in mind, or rather kernel developer fun (which would be understandable). <p>Wrt the frame buffer change, we don't disagree. I'm all for new models which improve user experience, and I am certain that the community shouldn't wait for ATI/NVidia. Just make the API change predictable and smooth (keep the old API for one 2.6.x cycle, say) and if it's a good model I'm pretty sure they'll follow suit. <p>Meanwhile, before taking this discussion further, we should perhaps clarify what we mean. Is it "in-kernel development" if someone has his own git tree with the latest version of his driver? Or does "in-kernel" require him to push his changes to his subsystem maintainer, say, once a month? Or more often? What about people who prefer not to use git? Mon, 12 Jun 2006 09:38:00 +0000 benefits of out-of-tree development https://lwn.net/Articles/186940/ https://lwn.net/Articles/186940/ cventers <font class="QuotedText">&gt; That'll catch mostly trivial problems, which an external maintainer</font><br> <font class="QuotedText">&gt; will be able to fix as well (if he can figure it out, see last</font><br> <font class="QuotedText">&gt; argument).</font><br> <p> Ah, but once again, you're presuming this external maintainer _exists_. <br> I'm saying that when a driver only has two users, he probably doesn't, or <br> if he does, he's not likely interested enough to follow the chaos of <br> every release. <br> <p> And I disagree that it'll catch "mostly trivial problems". While it's <br> possible to introduce breakage in a way that build testing wouldn't <br> detect, the vast majority of breakage in fact comes from API changes. You <br> probably don't notice these API changes because developers prefer to keep <br> everything in tree where it's possible to fix all the users at once <br> (hence, a two-user driver with no maintainer gets a temporary maintainer <br> -- the guy making the API change who won't get his API change accepted <br> unless the kernel builds).<br> <p> <font class="QuotedText">&gt; It is nice, in theory, yes. In practice, it often doesn't work that way</font><br> <font class="QuotedText">&gt; - external drivers are needed nonetheless. And it requires the kernel</font><br> <font class="QuotedText">&gt; to be bloated with drivers for every device that can reasonably</font><br> <font class="QuotedText">&gt; expected to be supported - an approach that doesn't scale. Most</font><br> <font class="QuotedText">&gt; "stable" distributions need to backport drivers to older kernel</font><br> <font class="QuotedText">&gt; versions and thus don't benefit directly from in-tree development.</font><br> <p> In theory? This is not theory, this is the reality of how the kernel _is <br> done today_. We have in-tree drivers with two users. The kernel <br> maintainers want _more_ in-tree drivers, even if hardly anyone uses them.<br> <p> The approach isn't totally perfect, because kernel source tarballs are <br> sort of heavy these days. But as common as broadband is, it's not much of <br> a problem. And the running kernel is bloated with nothing - thanks to the <br> extensive support and coverage of Kconfig and the modular kernel <br> architecture, pieces can be loaded and unloaded at will.<br> <p> And yes, I'm aware distributions backport drivers. Developing drivers out <br> of tree wouldn't change that fact; rather, it would actually give <br> distributors _more_ work.<br> <p> You have to carry your argument out a little bit to see its consequences. <br> What if there were 100 out of tree drivers? That's 100 more projects <br> distributors have to watch for security vulnerabilities, fixes, etc. <br> That's 100 sources they have to obtain and wrangle. And if a maintainer <br> gets hit by a bus, they now have to _forward port_ drivers for their <br> users to prevent breaking working configurations. None of these problems <br> exist when everying is in-tree.<br> <p> <font class="QuotedText">&gt; I don't. I say that the kernel needs a reasonably stable API. I don't</font><br> <font class="QuotedText">&gt; mean "frozen", but changing in a sane way that external people can</font><br> <font class="QuotedText">&gt; track without going crazy. </font><br> <p> Read Documentation/stable-api-nonsense.txt. The 2.6 development process <br> is _fantastically_ efficient compared to all other efforts I'm aware of. <br> It gives some people the willies, but it does what matters most - getting <br> the job done. <br> <p> Without the current model, the rapid rate of change and evolution in the <br> kernel would not be possible at all.<br> <p> I'm reminded of a recent LKML thread "OpenGL-based frame-buffer concepts" <br> discussing new ways to work with vgacon, fb and drm. The possibility <br> exists to build a new, better graphics system - but the problem is <br> getting those _out of tree_ ATI and NVIDIA drivers to follow.<br> <p> Fri, 09 Jun 2006 15:51:47 +0000 benefits of out-of-tree development https://lwn.net/Articles/186920/ https://lwn.net/Articles/186920/ wilck <blockquote><em>Given that the kernel _is_ tested with allyes ...</em></blockquote> <p> That'll catch mostly trivial problems, which an external maintainer will be able to fix as well (<em>if he can figure it out</em>, see last argument). <blockquote><em>distributions don't have to deal with nearly as much crap ...</em></blockquote> <p> It is nice, in theory, yes. In practice, it often doesn't work that way - external drivers are needed nonetheless. And it requires the kernel to be bloated with drivers for <em>every device that can reasonably expected to be supported</em> - an approach that doesn't scale. Most "stable" distributions need to backport drivers to older kernel versions and thus don't benefit directly from in-tree development. <blockquote><em>How do you really expect to be able to manage many out of tree drivers without a reasonably stable API?</em></blockquote> <p> I don't. I say that the kernel needs a <em>reasonably</em> stable API. I don't mean "frozen", but changing in a sane way that external people can track without going crazy. Fri, 09 Jun 2006 13:22:46 +0000 benefits of out-of-tree development https://lwn.net/Articles/186892/ https://lwn.net/Articles/186892/ cventers Heh, I'm definitely not in that minority. It's pretty simple, I think -- <br> how often do you think these two-user drivers are going to have someone <br> _outside_ the kernel tracking changes? API changes are likely to result in <br> compile failures before failures to behave. And given that the kernel _is_ <br> tested with allyes, these API changes will have to be extended to support <br> all in-tree code.<br> <p> Moreover, one of the biggest advantages of having everything in core is <br> that distributions (and hell, even users) don't have to deal with nearly <br> as much crap to have a working system. It's really excellent when you can <br> worry about _one_ kernel package and hotplug all sorts of devices in <br> without worrying about messing with drivers.<br> <p> The friction is frankly worth the benefits of life in-tree. How do you <br> really expect to be able to manage many out of tree drivers without a <br> reasonably stable API? Breakage would be constant. It would require the <br> cooperation of lots of people on a single change, rather than one man with <br> a quilt full of patches. In-tree drivers give kernel developers the <br> freedom to consistently refine the code.<br> Fri, 09 Jun 2006 05:16:20 +0000 benefits of out-of-tree development https://lwn.net/Articles/186854/ https://lwn.net/Articles/186854/ wilck I am assuming that _someone_ is working on the driver, e.g. on SourceForge, and will react when API functions change (e.g. by tracking the LWN kernel API changes page).<br> <p> If the kernel developers themselves don't care for the driver, this person will have to do adaptations anyway, because even if API changes are applied to it in-kernel, if it's done without testing, the driver will probably be broken.<br> <p> <a href="http://lwn.net/Articles/186427">http://lwn.net/Articles/186427</a> mentions that even core developers like Jeff Garzik and Alan Cox aren't satisfied with the process of integrating drivers into the kernel. The problem is worse for less well-known developers. Trying to shove the code upstream generates a substantial amount of extra friction which can be avoided by developing out-of-tree.<br> <p> If the driver has only few users, what's the benefit of having it in-tree, after all? Why should every Linux user have to deal with the code?<br> <p> For many drivers, development doesn't primarily mean adaptation to kernel API changes, but improvement of the driver and its features (e.g. hardware support). Pushing new code of that second type upstream can be a tough exercise. I happen to know that a few drivers that are considered by many to be developed in-tree (take megaraid, for example) are actually developed out-of-tree, pushing certain code drops into mainline every few months.<br> <p> I know it's a minority opinion on LWN, but I think that "all drivers must be developed in-tree" is a strongly exaggerated statement.<br> Thu, 08 Jun 2006 20:26:11 +0000 old code https://lwn.net/Articles/186848/ https://lwn.net/Articles/186848/ cventers Pardon? If the driver is out of tree, and few people use it, chances are <br> no one will ever touch it. If the driver is in tree, and someone changes <br> an API, they're typically expected to fix all in-tree users of the API, <br> hence the driver stays (somewhat) up to date.<br> <p> I don't see how having the driver out of tree can speed up any workflow. <br> Would you care to offer a detailed example?<br> Thu, 08 Jun 2006 19:33:27 +0000 old code https://lwn.net/Articles/186817/ https://lwn.net/Articles/186817/ iabervon A substantial portion of the routine updates that driver code in the kernel gets is simply updating it for API extensions. The common case is that some function gets an additional argument to allow non-default behavior, and the person adding it can find all in-kernel uses of the function and add the argument that makes it do what it would have done before. Unless there's something terribly wrong, this won't affect whether the driver works. And, with it in-kernel, the most common failure (it doesn't get updated at all, and doesn't compile) can be detected automatically with allyesconfig.<br> Thu, 08 Jun 2006 16:13:13 +0000 old code https://lwn.net/Articles/186815/ https://lwn.net/Articles/186815/ wilck If the core developers don't care about a driver, the porting work is the same whether the driver is in-tree or out-of-tree. <br> <p> Having the driver out-of-tree (using a separate git-tree or whatever other tools) can actually improve and speed up the driver maintainer's work flow.<br> <p> Thu, 08 Jun 2006 16:00:26 +0000 old code https://lwn.net/Articles/186704/ https://lwn.net/Articles/186704/ cventers Well, the thing is that many people are doing this for fun, and fixing <br> bugs / cleaning code isn't always fun. It can be, but the most exciting <br> work is in making new things, which is why there are issues that <br> unfortunately linger.<br> <p> You're right about regression tests, but I wouldn't say it illustrates any <br> particular disadvantage in having drivers with only two users. That code <br> will get built with allyes config, and so it's actually kept after better <br> than if it sat out of tree and grew mold.<br> <p> It's true that the low number of users may mean that it regresses in <br> various ways as the main code goes far forward, but if it sat out of tree <br> and only had two users then it would quickly become useless because no one <br> would work on it at all.<br> Thu, 08 Jun 2006 09:05:55 +0000 old code https://lwn.net/Articles/186688/ https://lwn.net/Articles/186688/ xoddam As long as old crufty code gets thrown away in favour of code which is <br> fundamentally better designed, it's okay if people concentrate on fixing <br> bugs in newer code. <br> <br> Regression tests are vital, and pursued positively, but there simply <br> isn't a wide enough range of hardware running them to ensure that nothing <br> ever breaks. <br> <br> That's one *disadvantage* of having drivers in the official kernel which <br> have only two known users: if no-one is even building it as the kernel <br> evolves, no-one will notice when it breaks and it may as well be <br> out-of-tree. <br> Thu, 08 Jun 2006 07:40:27 +0000 Quote of the week https://lwn.net/Articles/186673/ https://lwn.net/Articles/186673/ cventers I see Alan's point, but I have to wonder with the vast rate of 2.6 changes <br> (hell - just look at the size of the diffstats!) if such code would really <br> be cleaned in the long run. One complaint about the 2.6 cycle I've heard <br> is that developers are much more interested in new code than fixing old <br> code...<br> Thu, 08 Jun 2006 05:03:59 +0000