15 April, 2009

Why Linux has no chance on the desktop (maybe)

There's been all this talk about making Linux easier for human beings (see: Ubuntu) for quite a long time now. Unfortunately, this will probably never happen. This isn't the distro maker's fault; rather, it's the kernel's fault. There may be hope, however. I certainly hope so.

Before I continue, let me make a note: when I say ABI, I don't mean the userland ABI. That's actually very stable, and wisely so. I mean the kernel ABI, what drivers and whatnot are targeted for.

The main problem with the Linux kernel is that it has always been a notoriously fast-moving target. There are frequently ABI-breaking changes in the kernel due to "improvements". The maintainers like to say this is a good thing. They claim that it allows rapid improvement in interfaces. They also make the further bold claim that "you don't want a stable ABI," which has brought me endless hours of laughing.

There's a few problems with constantly changing the ABI, but the biggest one is that third-party drivers have to keep up. Hardware vendors don't want to spend money to constantly keep up. Thus, they avoid Linux like the plague, or when they do write drivers, they tend to be unusable in just a few kernel releases.

The kernel maintainers rant about how these vendors "leech." Although yes, companies which make their specifications open are very nice, and companies who want to work with kernel maintainers are too, not all vendors are like this. It's unfortunate, but it's true. And surely as the sun shines, there will always be vendors who are unwilling (or even unable) to release their specifications or cooperate to make open-source drivers.

In my opinion, the real agenda behind having an unstable ABI is because of "those stubborn vendors." The kernel people want to "enlighten" the vendors, and show them what they think is the right way of doing things. They are going about it in completely the wrong way, though. The only thing they are achieving is making Linux an inferior platform due to lack of driver support, or inferior due to flaky drivers.

However, there would be a shining light: a stable ABI. An ABI which changes very little over time, or at least provides for backwards compatiblity. Microsoft surprisingly has the right idea about this. Your Windows 2000 drivers, for example, are almost certain to work on Windows Vista or even Windows 7, despite being 9 years old.

This shining light doesn't exist in Linux, though.

I would love to see someone try that with Linux in its current state. Often, third party drivers break each kernel release. Either the vendors catch up (which means spending more money in programmer resources and the like), or they get left behind. This means users are usually either stuck on old kernels, unable to upgrade to the latest and greatest, or they're stuck with a possibly vulnerable kernel.

Some would say reverse engineering solves this problem. Reverse engineering, however, is a difficult task to do, and reverse engineered drivers almost always lack the full functionality of a binary driver. Inferior drivers means that users are likely to just stick with Windows, where their hardware (usually) Just Works(TM). There is also a small risk the vendor could sue over this (it has happened before a few times, although I can't list specific cases right now).

Many would argue Linux already supports most hardware. This is only partially true. There are still gaping holes in many areas; for example, TV tuner card support is still extremely flaky, even with the Brooktree Bt878-based cards. Web cam support also tends to be a very sore spot. Graphics cards are a bit better than they used to be (especially with Intel (well, Intel tends to be crap no matter what), ATI, and Nvidia; the top 3 really); however, the kernel guys are making it harder than it has to be for them to support their hardware. New hardware support also usually tends to come slowly.

Most of these problems could be solved by making the ABI to the kernel mostly stable, or at least providing backwards compatibility. A stable ABI means that vendors don't have to chase a moving target, and that vendors can make binary drivers with minimal effort (and have them work for a long time to come).

This is only a dream though.

A possible solution would be a kernel-space library that implements a stable ABI for vendors to build their drivers on. This library would "chase" kernel development, keeping up with recent changes, while keeping "forward-facing" compatibilty the best it can. Maybe someday someone will do this; I doubt it, though.

14 April, 2009

Takeover of the blunt knife

GreaseMonkey's decided to go on to greener pastures, so I'm taking over this blog. But first, an introduction.

I'm Jacob Myers, aka Spaz. I'm 18 and live in Florida. I'm obviously male (if you know a girl named Jacob I would be most curious to meet her). I already have a blog on blogspot.

Now, you may be wondering what rants you'll expect from this change of management. Me and GreaseMonkey both share similar thoughts on things, with two big changes: I'm atheist, and I'm far more liberal. Although I'm not the type of atheist GreaseMonkey rants about, do be aware that you won't see anymore religious rants (with the exception of perhaps real cults or radical ${religion}ists). As for me being more liberal, well, this means I'll might rant on things like the second amendment or how capitalism sucks (although I try to avoid sensitive issues).

Anyways, hope you enjoy whatever I have in store. Also, I'm keeping GreaseMonkey around as an author, so you may or may not see an occasional rant from him.

13 April, 2009

End of an era: I'll try something a little nicer.

I'm going to stop doing my rants on this blog now.

Why? I'm not exactly achieving anything by flaming everyone, am I? I'm aiming with the help of God* to be less ANGRGRY HURRRRR and to allocate some time to think. Yes, I am human, and I still get pissed off, but I'll try and let my anger evaporate.

* Just in case you haven't established already, I am a Christian. Captain Obvious to the rescue (I hope).

If there's something which frustrates me, I'll probably look at it without saying fuck every 10 seconds.

Uh, just something to ponder (this is my MSN status message at the time of writing):
Easter 2009: A girl who went to the easter camp I went to this year had broke her glasses on Saturday. Her eyesight was so bad that her glasses needed 3 lenses. The next morning, her friends prayed for her, that God would heal her eyesight. She opened her eyes and... it was still fuzzy. But a while later, she went back to her tent, and her friend gave her a book to read.

She could read it.
Yeah, I went to an easter camp this Easter weekend and I think I've finally actually found God. I mean properly this time. As in, I gave him control and stuff like that.

I deleted a bunch of copyright violating stuff because I finally can (I got bogged up with nerves the last few times I tried). Not that this makes me look good, but that I finally can get some crap sorted once and for all, instead of being pulled by my own selfish earthly desires. Those of you who think atheism gives you free will: it doesn't. It just binds you to your selfish earthly desires, and you find that your body doesn't do what you want it to.

Watch this space... and oh crap, it's 10pm.

I need a name for a new blog. Any ideas?

Update: This is the new blog. Enjoy.

07 April, 2009

Hilbert hotel paradox: Makes sense to me.

Note: This isn't really a rant, just something I was thinking of.

The Hilbert hotel paradox, AKA "Hilbert's paradox of the Grand Hotel," goes as follows:
Suppose there is a hotel with infinitely many rooms, and each of them are full. Now, some guests would like to stay at that hotel. How can you allocate rooms for them?

Well, it's doable. Confused? If not, you probably know this already.

Let there be a function f: N -> N, where N is the natural numbers starting from 1, that is:
N = {1, 2, 3, ..., x}, where x converges to infinity (note: this is the only time x is defined this way).
Let g be the inverse of function f, so g: N -> N, and g(f(x)) = x.

So, how do we allocate a room? Let's say there are n new guests, where n is a finite natural number, and n > 1. We move the guests along n rooms, so the guest in room 1 goes to room (1 + n), the guest in room 2 goes to room (2 + n), and so on. By the end of it, the rooms from 1 to n inclusive are free for the n guests staying.

Here's the math behind it:

f(x) = x + n
g(x) has to reverse this operation...
g(x) + n = x
g(x) = x - n

Yay. Now, we can feed any natural number into g(f(x)), and this happens...
g(f(x)) = g(x + n) = x + n - n = x.

Now, what happens when we feed a number from 1 to n inclusive into g(x)?
g(1) = 1 - n
If there were more than 0 guests, this would be less than 1, which is not in the set N.
Here's the next bit:
g(n) = n - n = 0
0 is not in the set N.

Now, what the hell did I just say?
  • The person entering room n would have had to originally be from room 0, which does not exist, therefore the person could not exist, therefore room n would end up empty.
  • Room -1 does not exist either, and same can be said for any negative integer.
  • As n > 1, room 1 - n does not exist either... and so on. It turns out that there are n rooms free.
Hey, we have exactly n guests! Perfect!

The thing with infinity is that it has this weird property, that given any real, finite number x, infinity + x = infinity (x can be negative), so f(infinity) = infinity, and g(infinity) = infinity, which just happens to be in the set N. Yay, no-one gets shoved out! Woo!

So everything is fine and dandy, until infinite guests try to stay at the hotel...

Crap.

We will need a new f: N -> N, and a new g: N -> N to be the inverse.

The trick to this is to make everyone go to the room with the number which is double the room number of the room that they were staying in. So, the guest in room 1 goes to room 2, the guest in room 2 goes to room 4, 3 to 6, and so on, going on forever.

Let's define a function! Yay! I like functions!

f(x) = 2x

And let's define g(x)...
2g(x) = x
g(x) = x/2

Now, given any number x in the set N, we get something happening like this:
g(2x - 1) = (2x - 1) / 2 = x - 1/2.

x is a natural number. When we subtract 1/2, which is not a natural number, we get a number which is not a natural number, and so it doesn't appear in N. Let's try x = 1:
2*1 - 1 = 2 - 1 = 1
g(1) = 1 - 1/2 = 1/2.

This would imply that the guest who moved into room 1 originally came from room 1/2, which does not exist, so the guest does not exist, so room 1 is empty. Seeing as x just keeps on going and going onto infinity, we can shove infinitely many people in...

Now, let's try this, which exposes another weird thing about infinity, as far as I know:
f(infinity) = 2 * infinity = infinity.
2 is not negative, so we don't end up at -infinity, just infinity.
Hey! Infinity is inside the set N! We can just keep on going, and going... and no-one gets shoved out! Brilliantastic!

Anyways, I'm kinda hoping that made sense, as infinity is really weird, but apparently you can shove infinitely many people in a hotel with infinite rooms where each of the rooms are full, and they will still fit.

EDIT: Well, apparently not all the time. Suppose there are infinitely many groups of infinitely many guests each. Apparently this system will break. I highly recommend you read this story.

Let r be the number of groups of infinite guests. Now, to move them along...
f(x) = (r + 1)x
And for our inverse, which we probably won't need...
(r + 1)g(x) = x
g(x) = x / (r + 1)

r is infinity, so:
f(x) = (infinity + 1)x = infinity * x = infinity.
So, nobody ever settles down, as everyone ends up in the same damn room.

Now let's use the inverse, just for kicks, as we've already proven that nobody can get a room:
g(x) = x / (infinity + 1) = x / infinity = infinitesimal (infinity ^ -1, or 1 / infinity). This is not part of the set. So nobody came from any room given, which is a complete cock-up.

There you have it; we just broke the hotel.

EDIT 2: If you have a hotel with infinitely many buildings, each building containing infinitely many rooms...

f: (N, N) -> (N, N)
g: (N, N) -> (N, N)
f((x, r)) = (2x, 2r)
g((x, r)) = (x/2, r/2)

g((2x - 1, 2r - 1)) = (x - 1/2, r - 1/2) which each entry is not in the set N.

Theorerically, infinity * infinity = infinity^2, as there are more dimensions to infinity. Or something like that.

Of course, you can break this hotel by sending infinitely many groups of infinitely many groups of infinitely many guests, which can be fixed by... well, you get the point.

EDIT 3: Apparently I'm kinda wrong in some respect. Hopefully this sets it right...
<@James> You can break the hotel by sending infinitely many groups of infinite guests
<@James> Just not for the reasons you stated
<@James> The way it works is that you've got your infinite number of rooms, each numbered with a natural number
<@James> And you've got an infinite number of busses, each numbered with a natural number
<@James> But the infinite number of guests have to be written as real numbers for each bus
<@James> i.e.: bus 1, guest 049349013745718234078104378314739028478025780437589205...
<@James> which would be 1.049349013745718234078104378314739028478025780437589205...
Uh, yeah.

EDIT 4 (how many of these damn things do I need?!): Here's a link about this subject which was recommended by the James mentioned in that last edit.