Bah, Kubuntu is for pussies, real men use debian... And the first thing they do is "sudo apt-get suicidelinux" (I think that was it) - you'll soon learn not to type incorrect commands with that, incidentally, don't actually try Suicide Linux, it probably won't end well, given how unreliable Linux is.
Incidentally, the host for this site is running Ubuntu as far as I am aware, 'tis a silly idea, IIS is the
only way to host a website and MS-DOS is the only OS you'll ever need for a workstation, I refuse to use Linux, their communities are worse than the Apple users, that *NIX garbage has been around for bloody years - three decades - and they still can't get it to run properly, no distro after 2007 will even install on my rig, but when I was using it I either had RedHat, Suse, Kubuntu or Debian and a simple os called Minix, they were all particularly unruly and were not very reliable whatsoever.
I remember one time in Suse I changed my screen resolution from 800x600x8 75Hz to 1024x768x4 60Hz and it never booted again, the same kind of problem happened in every other distro I used, forcing me to leave it alone at the default resolution, and don't even get me started on what you have to do to make any code run on Linux, when I used to write C for use with a 3D API some of the if's I had to add just to draw a single triangle under Linux were ridiculous and had to be made so inefficient that decent frame-rate was never going to be acheived unless I added yet more code to lower the polycounts and details at load time, making that take even longer.
For example, to draw a triangle in OpenGL (Probably won't work with modern compilers, Cygwin is a joke) - this method is "Procedural".
glBegin (GL_TRIANGLES);
glVertex (0,0,0);
glVertex (1,1,0);
glVertex (2,0,0);
glEnd ();
Linux was comparable to Direct3D even though you
were using OpenGL - This method uses crappy frame-buffers.
v = &buffer.vertexes[0];
v->x = 0; v->y = 0; v->z = 0;
v++;
v->x = 1; v->y = 1; v->z = 0;
v++;
v->x = 2; v->y = 0; v->z = 0;
c = &buffer.commands;
c->operation = DRAW_TRIANGLE;
c->vertexes[0] = 0;
c->vertexes[1] = 1;
c->vertexes[2] = 2;
IssueExecuteBuffer (buffer);
Note, that this code is from an old project I worked on a long time ago, I have no idea if it works.