Vanishing Features Of The 2.6 Kernel
chromatic writes "Jerry Cooperstein has written an excellent article summarizing the features removed from the upcoming 2.6 kernel. One controversial change may be tightening restrictions on binary-only modules." And Lovechild writes with some more 2.6 news: "I recently did an inteview with famous kernel hacker extraordinare and all round nice guy Robert M. Love for Tinyminds.org, about kernel 2.6 and what can be expected for desktop Linux users, when the new kernel series is released.
hopefully there wont be anything in the kernel related to the advertising. M$ .net sdeems to be paying for this article....
bite me
rainman
Nothing's vanished... just not included... now you too can learn to kernel hack!
www.superdorf.com
Pros:
Cons:
Have the kernel devs decided whether they are good or not?
-- Will program for bandwidth
I am an op in a Linux support channel on IRC, and I always dread new rleases of both kernels and redhat. It never fails.. some noobie comes in *demanding* we help him fix the production mail server he just trashed by installing RH8 or the newest kernel (dev or otherwise).
For anyone out there who is just waiting and drooling on themselves over 2.6, unless you NEED one of the few features present in a new kernel, you have no need to upgrade. The latest isn't always the greatest, and even "stable" releases need to go through testing before you put them in production.
Everyone is entitled to their own opinion. It's just that yours is stupid.
If non-GPL companies feel they can require users to install binary-only modules, why not simply requiring them to apply a kernel patch to remove this new limitation first?
Or, better still, why not delivering the whole product with an installer doing all this for them? It's not going to break GPL, as long as they publish the source code for the patch itself, which should be trivial.
I'm all for GPL, but this is not going to make that big an impact.
Score:-1, Wrong
See also: quickest way to discourage commercial development on your platform.
Gee, do you think all these corporations who have been embracing Linux in these past few years will still be using it when they can no longer use their expensive software investments with it? I doubt there are reasonable open source alternatives for most of these applications, like video card drivers or movie production applications, for example. Good luck on getting more people to adopt your platform after that.
I forsee a massive move to FreeBSD if this bullshit continues.
--sdem
Anyone know if Reiserfs4 got into the 2.6 release? I think I read Reiser had been pushing Linus to include Reiser4, and from what I've read in LinuxJournal, Reiser4 supposed to be 2-3 times faster than Reiser3.
Je ne parle pas francais.
A simple example might be where Robert Love mentions the need for a standard disk layer. What does that mean, to somebody who doesn't understand the way that the kernel in many areas creates a standard set of instructions (e.g. for disks, like "write", "access x data") and that he thinks this should be extended to disks, to take some of the bloated code that repeats all this stuff out of the SCSI codebase?
I think hackers in general really need to work on getting their ideas across to the more average person, otherwise most people have no reason to get excited by new releases unless they enjoy growing numbers!
On the downside, the module (for the Lucent winmodems) was originally released for the 2.2.x kernel. It was never updated by Lucent, but some people on the net figured out how to change the headers so it works with the 2.4.x kernels.
If it becomes impossible to use this module with 2.6, and it looks like the changes to the module interface are large enough to make the module completely incompatible, I have a few choices:
- Stick with an older Linux distro which uses a 2.4.x kernel.
- Wipe Linux and use Windows. [1]
- Spend over $100 for an external modem (I'm a college student, so no).
- Drop out of school for the next semester, and abandon my current open-source project so I have the time to develop an open-source driver for win modems. I want to graduate ASAP, so alas no.
- SamThen again, Lucent may force people to use older drivers for newer versions of Windows, like XP. Then again, Windows 98 is still supported (name one Linux distribiution which came out in 1998 which is still officially supported), and it should be possible to use a Win98 driver with XP.
The secret to enjoying Slashdot is to realize that it should not be taken too seriously.
The best solution depends on your point of view.
For some technical correctness is a primary goal, in Linux this means that sometimes features and interfaces change.
This may tend to piss of some, but you end up with a technically superior product.
For others consistency of interfaces may be most important and technical correctness is secondary.
This tends to generate lots of legacy crap, we see this in MS Windows. Now they're cleaning up, and we have the compatibility problems.
There is always a tradeoff. But I think a well documented technically good solution is best.
You can use the old kernel, you can use the new kernel, you can use your own kernel.
Everyone can make whatever they want.
They don't owe you anything.
As other posters have already specified, you can distribute your own kernel or patch that doesn't enforce the GPL license, but in doing so you may indeed be violating the GPL yourself. Remember, the GPL is like any other license, you must abide by it or lose the privelidge of using the software.
Also, this does not break userspace (i.e. proprietary and binary-only applications), unless such software is dependent on a binary-only module.
I, for one, am curious to see how those people who really want to distribute binary modules will react. I think many have a market in Linux systems and will continue to provide their code. However, they may be well-served to develop a GPL module that provides very consistent interfaces for binary-only modules. The kernel developers don't want to do this, but if developers of binary-only modules develop it and apply it, well that's their business.
I always get the shakes before a drop.
And that multibillion dollar business can't find a handful of guys to make their own kernel.
I don't think kernel developers are _that_ expensive
Jesus, give me some whitespace! At least a
here and there.
See how nice this looks?
Even if you make good points, nobody is going to read a long post with no whitespace.
Why, o why must the sky fall when I've learned to fly?
When a new product comes out on the market, the box almost always includes a cd with a windows driver on it. That driver is written and supported by the manufacturer of the product.
I love linux but I want so bad to be able to buy the latest neates thing and have it just work right away in linux and not a year later. Right now I have a radeon 9000 pro and a wintv pvr 250 I'm struggling with.
Drivers are the ONLY issue I have with linux and because of that I'm trying to learn C but I have so far to go and in the meantime I have to just be patient and wait for the vendor to produce a driver or for some linux developer go buy the same card I have and make it work. That's all fine and dandy except for this one thing: Some of these kernel developers are PAID to develop the linux kernel. That's right, it's their JOB. Not to show any disrespect to those kind hearted souls who sacrifice their spare time to do a community service, but as an enduser who has paid far far more for linux distro's than I ever would have paid if I was using Windows I have a right to insist on support for ME the end user. I have purchased Redhat 7.1, Mandrake 8.2,9.0 and every Suse since 6.2. It's my opinion that the kernel developer employed by the distro's have an obligation to develop the linux kernel with me in mind. And I want drivers. I don't care if they're GPL or not. I want hardware vendors to write the driver for the hardware they sell and distribute that driver WITH the hardware. And I want that driver to just work. That means the linux kernel must allow it to work. Politics and personal philosophy regarding open source have nothing to do with the discussion. I'm a paying customer and I should be treated that way.
Samsung took back my unlocked bootloader because Google wants me to rent movies. They're both evil.
Most observers foresee a tightening of the limits on binary modules. This may very well break some rather expensive commercial Linux products, but that doesn't seem to bother most kernel developers.
Can you imagine the magnitude of the sh*tstorm they would create if Microsoft tried to pull something like this?? That's a pretty ballsy move for people who rely on the good will of the companies developing software for their platform.
I've seen quite a few posts that seem to imply that binary modules cannot be used with the new kernel. That is not true.
What is true is that they are doing things like not exporting the system call table so that any module can change it at their will. That is, a binary module can't replace the write call or fork call. There are other mechanisms like syscall registering for modules that need some new system call. (I haven't looked into that aspect yet).
What they are doing is not encouraging binary only modules. (and by binary I mean non GPL). The example they use is the modification of work queues. Things like tainting the kernel (so the kernel knows when it's been tampered with by proprietary code (read loaded a non GPL module)) have been around for a while now. Kernel people will not give support to problems with tainted kernels.
I use and nvidia driver in one of my computers, and that taints my kernel. I understand the implications. I also see no reason why nvidia has to modify my syscall table.
In short, I don't think normal "drivers" need to modify the syscall table. You can add a new filesystem, network protocol, etc without the need to modify the syscall table. So stop complaining about no more binary only drivers.
I agree with the developers in the choice. I also wish nVidia, along with the other companies, GPLed their drivers. After all, they are _drivers_ for the hardware I bought. And if they don't want to, they could at least release the complete specifications for the hardware so we can build our own 3D accelerated drivers.
cl
Reply . . . let's get it over with.
You are wrong when portraing the fact that you can still run Corel 3.0 as a plus. Windows is paying a huge price for maintaining backwards compatibility, it is really hurting the operating system and especially the developers who develop for Windows. The fact that Linux kernel changes the APIs often and does not have backward compatibility is is well-compensated by the fact that all the interface changes are completely transparent and has the advantage of preventing drivers bit rot (among others).
I passed the Turing test.
Its also important to realize that the methods being used to enforce the GPL in the kernel have been developed completely in the open. If binary-only module developers are having problems with this, have they spoken out, have they said anything, does this really affect them much? I've not seen much of a discussion of this on Kernel Traffic, except that the Linux kernel developers don't feel its their business to make concessions for binary-only modules.
/. readers are just gettting huffy for no real reason.
As for arrogance, they're enforcing the license on their product. Microsoft would do the same for their products if your code massages their code without abiding by their license.
BTW, this sounds like an idea for Ask Slashdot. Get someone developing the Linux/BSD drivers from nVidia to answer questions about this and find out if it really is a problem, or if
I always get the shakes before a drop.
You're missing the point. He already has one built into his laptop. He has no problem with the existing (binary) driver. What does your rant about how bad winmodems are have to do with anything?
Nobody is preventing NVidia from writing binary-only drivers, they just need to hook into the kernel at lower levels. Some kernel developers want the NVidia people to mooch less.
They're tightening restrictions, not banning binary-only modules. Relax. They're just saying if NVidia wants to use binary-only modules, that's thier perogative, but it's a huge pain for the developers that become de facto support for those NVidia drivers. Basically "You want to be a pain in my ass, go ahead, but you're now getting less help from me to do it."
The *BSD kernels are simpler and may not have equivalents to the special higher-level functions that are being hidden from non-Free modules. I don't know. In any case, it's unlikely NVidia is going to jump ship for one of the *BSDs. I'm not even surewhat companies hope to achieve by providing binary-only drivers. Thier competitors certainly have decompilers. If they really need to protect patented algorithms, that can be done in firmware/hardware and/or usermode drivers. Usermode drivers also prevent binary-only kernel instabilities and reduce kernel dependancies.
Copyright Violation:"theft, piracy"::Anti-Trust Violation:"thermonuclear price terrorism"<-Overly dramatic language.
If (and when) Microsoft do this it's significantly worse because they have total control of their operating system.
If the changes the Linux folk are making are indeed heinous then any one of us is permitted to fork if we so desire. With MS it would be all or nothing. With Linux if you don't like what you're being offered you can change it if you want to.
Boffoonery - downloadable Comedy Benefit for Bletchley Park
This is just another facet of the kernel developers' jihad against binary modules. Presumption of guilt does not imply bad code, it implies prejudice(*).
Recent drivers are better than they used to be, but the nvidia kernel module really, genuinely has had a LOT of problems. I have a machine with a Geforce2 that will stay up for months when using the open-source nv XFree86 driver (which uses no in-kernel code at all), but using the nvidia binary drivers oopsed at least once a day with random memory management errors and would freeze hard about once every 3-4 days. It finally seems to be fixed in the most recent release of the binary drivers. And let's not even go anywhere near AGP support - even with the most recent drivers, if I leave the AGP support on I am guaranteed a wedged machine within 5 minutes of starting X, whether I tell the driver to use the kernel or its own agpgart support. I'm not using weird hardware either - this is a PIII Abit motherboard with Intel BX chipset - about as standard as you can get. The card is flawless in Win2k with AGP on, again using the nvidia reference drivers. If I swap the Geforce2 out for the old Rage128 I have lying about, that works flawlessly in Linux too, 3D, AGP and all, but it's a lot slower than the Geforce. Oh, and I'm using stock Linux kernels, no distro-specific stuff or strange patches. The only option that I could see in the kernel that might make a difference is using the local APIC on the PIII as opposed to using the XT-PIC, as this can mess with the interrupt delivery timings and delivering an interrupt which the driver isn't expecting might wedge it, but I tried it both ways with the same results. It ought to just work though, right?
Therfore, the only conclusion that I can draw is that the nvidia Linux binary driver is buggy, particularly with regard to its handling of AGP. I don't think I'm alone in reaching this conclusion either - I have heard plenty of fairly similar bug reports. I can't begin to debug it myself because I don't have the source to the nvidia driver. I've reported it to nvidia. I haven't bothered pestering the kernel developers with it because it's plainly not their fault and there is nothing they can do to rectify the situation.
I admit I've not tried it in another motherboard, but why then does it work in Win2k flawlessly? Ok, Win2k is also using binary drivers - but then, when was the last time you mailed an NT kernel developer with a driver bug report? You don't, you mail the driver developer if they give you an address or simply sit tight if you don't have one. That's all the Linux developers are asking too.
Put simply, the reason the Linux kernel developers tell you to piss off if you're using the nvidia binary driver is because 99% of the time that is the problem, and if you're too stupid to be able to realise that and attempt to reproduce it without the nvidia driver loaded, then you're too stupid to provide a decent bug report and your mail might as well go straight to /dev/null. Most kernel developers are drowning alive in email as it is, and that's email that's got useful stuff in it. They have better things to do, like fixing bugs in code that they have the possibility to fix.
(*) Please don't flame me for calling Linus a racist.
I'm not. I'm flaming you for being stupid and not understanding the issues involved.
Would you care to elaborate on your "out of the ass" phrase "Windows is paying a huge price for backwards compatibility"? In fact Windows is paying a very small price. In fact the ability to run DOS or Win16 executables is also a very very small price.
The way it looks to me is that ALL of Linux pays a very large price for this constantly moving target of Kernel and GUI API changes. Not to mention constant and complex liscencing issues. The original user was right. MS makes it easy on both the user and the developer. Linux is extremely hostle to both. I mean the facts speak for themselves. Whitness the graveyard of quality user-level Apps on linux Vs Windows or Mac. It's been going on for over a decade and it still show no sign of changing. If Linux is to compete at all, then it can't go on as it has been.
Contrary to popular belief, coding is not all free blow-jobs and beer. Those things cost MONEY!
A lot of people are complaining that the new binary module licensing changes are too restrictive, and reduce people's freedom when writing drivers (and I won't argue with that). Something else to think about, though, is whether the new changes are really the best thing to do from a purely GPL standpoint, where the end goal is to have as much software as possibly be free. As the GNU project points out in their discussions on licenses, it is sometimes a better idea to allow binary software. There are other operating systems than Linux (I hear there's a company in Redmond that makes one that's quite popular). If Linux discourages or forbids binary only drivers, the driver manufacturers won't make drivers for Linux (since, in many cases, they are bound by licenses that won't allow them to release open source drivers). If Linux doesn't have hardware support, then fewer people will be willing to use it, and thus fewer software companies will release Linux versions of their software. So far, Linux hardware support has been very good, but slow. New devices are often poorly supported. However, commercial drivers (binary and open source) have been starting to gain momentum, new hardware is more likely to have support, often from the manufacturers of the hardware themselves. I hope that the new 2.6 kernel won't stall that advancement, and seriously slow widespread adoption of Linux as a viable OS.
"If English was good enough for Jesus, it's good enough for everyone else."
Err....pre-emptive is exactly what MacOS wasn't. It used co-operative multitasking - you called the yield() function every so often to ensure that other processes had a decent slice of the action.
Cheers,
Ian
No binary modules? What self-rightous idiot thought of that? That would alienate all major support for video cards. For all you purists, get it through your thick skulls: Patents exist on OpenGL and many other technologies (Such as S3TC) that are required for many applications (Such as Unreal Tournament 2003). Check other threads with nVidia-related information and you'll find more detailed information on nVidia / SGI / Microsoft / etc. patents on widely used industry standard OpenGL technologies.
And besides, imagine the hypocrisy of the Linux kernel devs taking away choices from the people that use their kernel. I mean, I thought Linux was supposed to be for people who actually wanted control over what goes into their kernel.
Is that if MS make such a policy change they are dictating to everyone as no-one else has the rights required to forge another route, it's their way or the highway
No one is in such a forced dependancy relationship with the Kernel developers. We may depend upon them by choice, but if what they do really is seen as unacceptable then the rights given to us all by the kernel licence protect us from being completely at their whim.
Boffoonery - downloadable Comedy Benefit for Bletchley Park
"Fundamentally this is a simple change but it requires a large-scale reimplementation of code to protect concurrency. Thankfully, the kernel's SMP spin locks already provide the large majority of this protection. So these spin locks are used as markers of where to temporarily disable preemption, to avoid mangling shared data. It works and everyone is happy."
Is this a hack? It sounds like a workaround, but maybe it's just creative use of existing tools.
Can anyone tell me if this is how other systems do preemptive multitasking? I really don't know. Is this similar or analogous to Intel's new chip that acts like a multiprocessor?
"I think hackers in general really need to work on getting their ideas across to the more average person, otherwise most people have no reason to get excited by new releases unless they enjoy growing numbers!"
Why should the average person be excited about new kernel releases? That sounds like Marketing Department talk to me.
Marketing people love trying to get the average people excited by inventing new symbols/acronyms for them - e.g. Quantispeed, PMPO.
As far as I can see, those who need to be excited have no difficulty understanding what the new features mean to them - better threads, better scheduler.
As a tech person I prefer a situation where if I don't understand something, it is actually something new to learn, NOT some stupid bullshit or LIE Marketing thought of.
Yes I know there may be cases where even the average tech person doesn't know what the developers are doing. But often that's a transitional case - maybe the developers aren't sure either - changing/testing stuff. And in other cases the average tech person doesn't need to know either. For example: if the developers do most of their stuff correctly, we won't need to know what a particular lock is for. Coz the reason why we would ask, probably means they screwed up somewhere: deadlock.
I'd love to see a kernel release with *complete* help and descriptions in the "make Menuconfig" system.
It's trivial to power users, but you've got to remember that a "serious" Linux newbie will get a lot of knowledge by playing with, and compiling, new kernels.
To truly understand what each feature does, the first place they usually look is in the "Help" button in Menuconfig. Not in the Readme's, and certainly not in the code.
If we actually make these help screens useful, and a little less condescending ("If you don't know what this does, say N here") we'd make the learning curve less steep.
It would also be nice to see a little more grouping by functionality. USB is a good example... it's a logical grouping by type of device. Perhaps though, USB, PCMCIA, etc. could be under "Removable hardware" (again, for the newbie and for ease of use) while network shaping could be under just that, and shaping/drivers/network file systems, etc. could all be under "network".
Trivial to you and I, but really important to the one group of people who count most: Future power users.
mindslip.
Why can't Liunx kernel developers come up with an API for binary kernel modules and keep it stable at least between minor kernel releases so that users could use third party kernel modules withfout having to recompile them for each kernel upgrade?
Look at Solaris. It's quite possible to take even certain kernel modules that were built for Solaris 2.6 and use them on Solaris 8 without recompiling. I am not even mentioning that kernel modules don't break at all between minor kernel releases (or patch levels) on Solaris.
The kernal part of the nvidia drivers are provided in source code form and wont be affected. The proprietary part is the X11 drivers.
Sorry if this is redunent as far as I read nobody brought this up.
Mess Stuff Up
It's not only not wise for ATI & NVidia to put out GPL drivers, it's nearly impossible. The trade secrets you mentiond are often enough third-party licensed features. S3TC is an example. The licensors would simply not allow to have their code released under GPL, even if NVidia wanted.
...I'm waiting with some amusement for calls to nationalize the Linux source code and imprison the current kernel developers.
"It doesn't matter if it's someone's homebrew project: simply by virtue of distributing it and acting like they had over the prior 10 years, they lulled us into a false sense of security. Then, WHAM! Bait and switch."
"We the users should have full rights over the development of this kernel. After all, this is a public works project."
"Linus, Alan, and everyone else use the roads to get to work, right? Or, if not, they buy food that is transported by the roads. Or, if not, they enjoy the smell of the asphalt. In any event, they are enjoying a public resource, which means we all have a right to the fruits of their labor."
I laugh whenever I hear these arguments applied to anything. I truly hope you're laughing to hear these arguments applied to Linux.
[ home ]
Companies sometimes write binary modules that work only with one exact version of the kernel for one architecture, thus preventing their customers from upgrading both their OS and hardware.
How is this any better? Why pick on the kernel developers but not on the binary modules creators?
Installed the Bubblemon yet?
Last time I checked there were a lot of wrappers for kernel compiling that made it somewhat simple, except for checking for things like your boot-loader would fine the new kernel, etc - which some people overlook. Is it simple a disable option... allow_binary_kernel_linkage etc?
Some people whine that they would like the source so they could mod their video card properties, but it's still a hell of a lot better than having no driver at all, for which many more people will whine unless they cannot get their video card to work without going through a huge hassle.
Then we have people whining about how the binaries can violate GPL. But maybe we need a clause for video drivers.
If the drivers are released as free to the public - not with source, but without cost, then that would make 90% of the users happy.
You also have to consider that things like video cards don't work exactly like software from a marketing perspective. Software like mySQL etc can market their troubleshooting and/or programming, as well as enhanced-feature licenses while still making their base-produce free and open source.
How many people would pay for a troubleshooting contract for a video card brand? The profit is in the sales, and the sales are based on that it works. I know very few people who would begrudge NVidea for releasing compatible drivers, even if they are only binaries. Making the hardware work is one more step towards making linux a more accepted o/s, and that's a good thing!
Umm... who said *any* of the kernel developers "dream of the average person using this OS"? There are certainly a lot of people up on soap-boxes about this particular issue, but I've never once heard, for example, Linus push this view. I know I couldn't care less if Linux was on every desktop. As a developer and general powe-user, it works great for me, and that's what matters.
Creative use of existing tools.
It sounds like you're a little confused about what preempt mode is and isn't. So here goes - HTH. It isn't the ability to preempt a running job in favor of scheduling a new job. That's called "preemptive multitasking", and Linux has had it since Day 1. It also isn't multiprocessing - running multiple jobs simultaneously via multiple CPUs. Linux has had that since, oh, 1995, I think (kernel 2.0).
Preemption, in this context, means interrupting one job to schedule another while the first job is busy running something within the kernel itself. You see, most processes ("jobs") run part of the time in user space where they are executing their own instruction streams, and part of the time in kernel space where the kernel is working on their behalf - reading disk files, sending messages to other processes, etc. Now, while the process is in user space, it can be preempted at any time, whenever the scheduler decides it has used its fair share of CPU and it's someone else's turn. (This is preemptive multitasking. MS-DOS and MacOS 9 didn't have it - on those systems, a single process can run as long as it wants, and is only stopped when it voluntarily gives up the CPU.)
Kernel space is another matter. If you ask the kernel to, say, read a disk file, it will usually put your process to sleep until the file comes back from the disk, and will schedule other processes in the meantime - but for various other work the kernel does on your behalf, it does not normally interrupt itself periodically to make sure you still have time left on the clock, as it were. Thus, if a process makes heavy use of kernel facilities, there may be (relatively) long periods of time where the process should "in fairness" relinquish the CPU but it won't because it's "in kernel mode".
The reason for this rule - the reason the kernel scheduler never jumps in and preempts other kernel code - is that by doing so it would be quite easy to corrupt the state of kernel variables. This one is hard to explain if you haven't learned about locking primitives in programming courses, and unnecessary to explain if you have. Suffice it to say that arbitrarily grabbing the CPU and switching to another task is prone to basically the same failure modes as having multiple CPUs running different tasks simulatneously - i.e. SMP mode.
So, what's the problem with not preempting kernel code? Say you have another process doing highly interactive things, like a game, or an MP3 player, or even the X server tracking your mouse movements. Ideally you want it to react to new events (keyboard and mouse input, for example) as quickly as possible, so your system feels "snappy". Which is a problem if another process happens to be taking its own sweet time in kernel mode while you impatiently wiggle your mouse for half a second, wondering if the system is frozen.
Note that if you have multiple CPUs and use an SMP kernel, this "latency problem" is not nearly so bad. Since any one of your multiple CPUs may be available to service your all-important "main snappy application", the chance of seeing unacceptible delays is greatly reduced.
With me so far?
So here's what the preempt patch does. It changes the above-mentioned rule so that the scheduler is allowed to interrupt other kernel code without explicit permission, just as it does with user-mode code. If the kernel happens to be in a critical section (another technical term hard to explain to those who don't already know it), it should already have taken a lock in the SMP-mode case, so preempt-mode just redefines the lock/unlock operation as "disable preempt mode" / "reenable preempt mode". Thus, the kernel can sit and do all the work it wants to, and as long as it isn't holding any locks, the scheduler can pause it and run something more important (like letting your MP3 player trickle a bit more music into your sound card so the sound card won't run out, at which time you'd hear a skip).
I guess the terminology is really up to the reader, but in my opinion, while this is a "hack" in the sense of "clever program snippet", I think "creative use of existing facilities" is a good description. The key here is the realisation that the problem of how to preempt the kernel in arbitrary places is very similar to the problem of letting multiple copies of the kernel run at once on different CPUs, and since the latter is basically a solved problem (it was, in fact, probably the biggest difference between the 2.0 and 2.2 kernels), Robert Love was able to reuse this infrastructure to solve the vast majority of the problems with the former, in one fell swoop. Of course, preempt mode had other problems which had to be solved other ways, but SMP support was the major thing that paved the way.
(By the way, this wasn't Robert Love's idea originally. Linus Torvalds expressed it some time around the 2.4.0 era, but didn't feel like doing the work himself. I don't know if it was his original thought or if all this has been done before. I suspect Solaris, at least, uses a similar trick.)
Completely different. Intel's HyperThreading mode uses cooperative (not preemptive) multitasking implemented within the chip itself. At least that's my guess. Each virtual CPU runs until it hits whatever Intel deems a good stopping point, then changes hats and lets the other virtual CPU have a go. It works because a lot of facilities in the CPU can go underutilised because of bottlenecks elsewhere (fetching memory into L1 cache, for example), so by simulating two CPUs you can often keep these resources busier.
"How can you claim that you are anti-crack, while still writing a window manager?" — Metacity README