Feeds:
Posts
Comments

t43 radeon x300Switching on external monitors works now. Most of the time with success (except some VGA monitors when using the wrong x and y dimensions or wrong Hz. It stopped working lately – now I found out why (I bought a dock which enables the use of DVI)!

The Radeon X300 seems to have ‘two crtc‘ interfaces only. And one is always used when the LVDS (laptop builtin display) is enabled (in use). So one is left. Since i use DVI-0 on one workplace and VGA-0 on the other i usually was forced to reset X to make things work, since i wasn’t aware of the resource limitation. The error which came up was:

% xrandr –auto –output VGA-0 –mode 1024×768
xrandr: cannot find crtc for output VGA-0

The solution is easy. Just disable (in this case) DVI-0 output. Next enable VGA-0 output again.

xrandr –output DVI-0 –off
xrandr –auto –output VGA-0 –mode 1280×1024 –right-of LVDS

Usability wise this problem is a result of a missing resource counter (maybe it exists) but still the interface ‘xrandr’ was not very helpful in diagnosing the issue. I would have expected an error message as:

xrandr: no free crct for output VGA-0 left. you can only enable two devices at a time, maybe disable one to enable the other.

lspci shows:

  • 00:00.0 Host bridge: Intel Corporation Mobile 915GM/PM/GMS/910GML Express Processor to DRAM Controller (rev 03)
  • 01:00.0 VGA compatible controller: ATI Technologies Inc M22 [Mobility Radeon X300]
  • 00:01.0 PCI bridge: Intel Corporation Mobile 915GM/PM Express PCI Express Root Port (rev 03)

Thanks to:

http://lists.freedesktop.org/archives/xorg/2007-August/027490.html

NetworkManager

network management on linux differs from distro to distro. trying various of these i liked what SuSE did over the year. they included a network manager like applet ‘knetwork’ with kde 3 which even included isdn (ppp) links.

gentoo has it’s own network configuration which is quite static using /etc/conf.d/net. i use this for static setups but i’ve written my own scripts for my laptop (aka desktop) machine. just one example:

wpa_supplicant_generic_dhcp_ath0
#!/bin/bash -v
echo “sh /root/config/wpa_supplicant_generic_dhcp_ath0″ > /root/last-lan.sh
if [ -f /var/run/dhcpcd-ath0.pid ]; then
rm /var/run/dhcpcd-ath0.pid
fi
killall dhcpcd
killall wpa_supplicant
killall vpnc
ifconfig br0 down
ifconfig ath0 down
ifconfig eth0 down
brctl delif br0 ath0
brctl delif br0 eth0
brctl delbr br0

rmmod ath5k
modprobe ath5k
#iw reg set EU #does not work
sleep 1
ifconfig ath0 up
wpa_supplicant -B -dd -D wext -i ath0 -c /etc/wpa_supplicant.conf
route del default
#dhcpcd ath0
iptables -t nat -A POSTROUTING -o ath0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

ethtool -s eth0 speed 100
dhcpcd ath0
#dhclient ath0

cp /etc/resolv.conf /etc/resolv.conf.dnsmasq
echo “nameserver 127.0.0.1″ > /etc/resolv.conf
ifconfig eth0 10.0.0.1/24 up
dhcpd eth0

although my scripts work very well (even when i restart my computer the last script is automatically run from /etc/init.d/local) this setup has it drawbacks in usability.

benefits:

  • starts a dhcpd instance, so my  laptop acts as a dhcp server (not included)
  • my local dnsmasq installation can be accessed from the eth0 subnet
  • setup for eth0 is automatically made & routing is enabled by default
  • i can adapt to new networks quite fast with yet another config file instantiation
  • once bridging is working for eth0|ath0 i can increase usability since i can transparently use either wireless lan or ethernet, say for backups the later might be much faster without having to kill all connections. (not included)

drawbacks:

  • although networks using none|wpa1|wpa2 it tends to have problems with vpn (i wrote another script)
  • it lacks usability, no monitoring what happens (in case of an issue i run it on a shell)
  • on bad connections with wifi the dhcp step fails quite some times, running the script again will result in (loss of time)
  • it reloads the wireless lan driver (helpful when i was using kismet for finding new networks), still this might not be necessary all the time (loss of time)
  • bad in regards to hot plugging (and therefore automation) after inserting a wireless lan usb stick (or similar)
  • my scripts require a static interface naming scheme, gentoo provides this by default:
    /etc/udev/rules.d/70-persistent-net.rules

i considered NetworkManager (NM). i like most of it’s technology as for instance the DBUS interface it uses is probably the best way one could implement something like NM. i also like the integration into gentoo but this came pretty late (ubuntu was the first distro which had quite acceptable NM support).

but NM does a very bad job if things don’t work. there is no debugging possible. example:

  • NM using WPA2 needs to create a wpa_supplicant.conf on the fly before executing wpa_supplicant. i did not find any way to see this file anywhere
  • NM won’t help me to see wpa_supplicant errors
  • NM will show the signal power if i’m connected to a certain network. this is limited to one interface in general. what about several wifi cards? what about bluetooth links?
  • NM lacks a graphical interface (or any interface at all) for debugging what is going on

this made me think about network and interface usage in general. i’m using many tools for years now as:

  • ip – for ipv4/ipv6 interface configuration & routing
  • dhcpcd/dhclient (managing dhcp address automation)
  • wpa_supplicant (wpa|wpa2|EAP)
  • vpnc (instead of cisco vpn)
  • dns (resolv.conf / dnsmasq) (openresolv is on the agenda, didn’t have time yet)

but these tools although relying on each other are monolithic and static software monsters. if one wants to understand what networks are all about it is one thing: dynamics in every aspect

the next graph shows a ‘network grammar’ which describes the possible dependencies or how one can stack various programs:

network grammer

but on ‘run time‘ you will end up in a ‘state graph‘ with every application somehow connected to others in various ways. states are also triggered on timeouts (for example when the ‘dhcp serverwasn’t accessible by the local dhclient one is forced to take action). now let’s look how the grammar applies on ‘run time’:

network state graph

the two previous graphics also demonstrate the stacking capabilities. looking at the grammar makes this obvious. (the grammar and the flow graph are far from complete but illustrate the basic concept).

  • if someone types ‘ip l set eth0 down‘ all connections regarding eth0 as source or target are removed as well es default or specialized routes over (through) that interfaces are dropped without being restored on ‘ip l set eth0 up’.
    example
    # ip l set eth0 up
    # tcpdump -i eth0 &
    [1] 5866
    listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
    # ip l set eth0 down
    tcpdump: pcap_loop: recvfrom: Network is down
    0 packets captured
    0 packets received by filter
    0 packets dropped by kernel
    [1]  + exit 1     tcpdump -i eth0
    HINT: dhclient for instance keeps running if the interface goes down
    HINT: ssh only detaches the eth0 interface from being used and on up reattaches it
    SOURCE: equery b ip -> sys-apps/iproute2-2.6.28 (/sbin/ip)
    iproute2-2.6.28::iplink.c shows:
    } else if (strcmp(*argv, “down”) == 0) {
    req->i.ifi_change |= IFF_UP;
    req->i.ifi_flags &= ~IFF_UP;

    this triggers the kernel in some way which then signals the change to every process using this interface.

  • in a state graph every object can perform an action considered best suited by the affected object. this helps to delegate some jobs to daemons (for example dhcpd) but every object affects the ‘state machine
  • the protocol for interaction is DBUS (there is a wpa_supplicant dbus interface, as well as one for dhcpclient usage)

maybe this idea inspires someone to rewrite NM with usability (in the sense of automation and debugging feedback) in mind. i think NM is on the right track already.

NM should:

  • show the connection state: either layer1 connection/layer2 connection/layer 3 connection
  • link quality per interface (wlan/bluetooth)network-meter
  • have a debug console which can be triggered
  • should have a ‘in detail’ network information dialog
    network information
  • should generate a wpa_supplicant.conf which can be viewed (so that one can see what the on-the-fly config file generator has created)
  • should pipe the output of all involved processes to a debug line, so that one can sort output per process with a global time line
  • regarding the ‘grammar’ above one can think of a ‘pyramid of services‘. if one of the services in the middle fails all above have to be restarted (or at least signaled on change). say vpnc fails, we need to reconnect it with all the things one has to do -> removing the current route, reset a new one (probably the same) and prior to that we have to reconnect as soon as the service is known to fail. vpnc for example fails quite some times since.
    this ‘pyramid of services’ should be visible to the user and a user ‘must have’ the possibility to see the status of every ‘floor’ in this pyramid. if layer 3 connection is working, l3 must light up. if a user wants to restart all services above layer 3 there must be a ‘restart all services above’ button. currently in NM one has to do all the steps from bottom up.

Since I am using a ATI Radeon “R300″ card, that is a card with a very poor written driver (at least for linux) I’m facing frequent X-Crashes or I am forced to restart X on ‘hot plugging‘ of external displays.Yes ‘hot plugging’ does sometimes work, sometimes not.

Since I’m also admin of several servers I’m also faced to the fact that ssh can not resume a disconnected session – that is since the session (OSI-model, layer 5, see [1]) isn’t implemented the layer 4 connection is associated as session instead.  That is a common among many programs used today – either surfing the internet or the local network. However the consequence is that once the connection is down it is unlikely to be resumed even though socket is still open on both server and client while the ip has not changed – a simple tcp timeout on one end can reset the connection.

If such a session is broken the result is that all started processes (which can be many, since they can be run in the background with the & operator) are closed immediately. For some operations as “mv dir1 dir2/” this can be fatal. Since this will result in inconsistencies most of the times.

The mainstream solution to this problem is using a program called “screen”. This “screen” has many features which make it a program worth knowing – even for local use, see [2] for screen commands I’m frequently using.

'konsole' hosting 'screen'

So back to the topic of this posting the issue with the bad R300 driver and X session resets.

The issue here is:

  • once the X server goes down my music I’m currently listening is also going down
  • all my ‘konsole’ consoles are killed (which can be plenty)
  • all my programs which use X (no wonder) are also gone

I would like to have ‘konsle’ to use a screen on every new ‘konsole tab’ I create. Or since screen itself can nest several consoles in one screen instance (that is one process) – why not start a single screen and attach the ‘konsole’ session to this screen. When a second tab is opened the second tab is automatically adding a new screen tab as well.

Once X goes down all processes are exited as already known – except screen. ‘Screen’ does not react to SIGTERM - it just keeps running. Later when you started into a new ‘X session’ you can open any console as for example ‘xterm’ or ‘konsole’ and with ’screen -r’ you can resume your session.

Now imagine ‘konsole’ to do this wrapping automatically. I could live with a toggle to switch the associated console back and forth between ‘session‘ behavior and ‘pervasive‘ behavior.

UPDATE: Think of this ’screen in konsole’ as you are already used to with firefox’s multiple tabs when doing store/restore after logout/login. (not reboot of course since our screen instances are useless after reboot).

This would be an incredible feature for ‘konsole’.

[1] http://en.wikipedia.org/wiki/OSI_model

[2] http://lastlog.de/wiki/index.php/Screenbefehle

[3] http://defindit.com/readme_files/bash_examples.html

UPDATE: ‘eliasp’ just told me to edit the ‘konsole’ profile with Settings->Manage current profile. Setting the command to “screen /bin/zsh” instead of “/bin/zsh” at least creates screen consoles on every new ‘konsole’ tab opened. I love this workaround but konsole should also resume. Consider a X crash now, after relaunch of kde I open just new ’screens’ instead of attache them.

UPDATE: ‘eliasp’ also mentioned [3]. I once tried to start ’screen’ on my internet server on login. The problem doing so is not recognized when using ’ssh’ but it will stop ’scp’ from working. Using [3] one can also detect “Disable xon/xoff and interactive login” when running screen on the remote side. This probably helps to circumvent the scp issue. Maybe once can also detect a running instance of ’screen’ and reattache with ’screen -dr’ or something alike.

I thank ‘eliasp’ for his feedback.

UPDATE: the proposal was accepted: http://forum.kde.org/brainstorm.php#idea83059

virtualization

long time ago (2005 or 2004) i was curious about this topic. my idea: installing linux and windows on one machine. both running at the same time. i also hoped to execute native windows applications on my X server using some kind of high-performance wrapper. (that already happened with the software [1] parallels on mac os x).

but it seems that there is some security issue with virtualization. since depending on the technique used (motherboard/cpu) there are some memory and bus issues regarding memory access protection.

and what happened to the idea of having two pci-x graphic cards in one pc having each os accessing one (when running linux and windows). can this be done with native speed? can i play games with full FPS?

it would be nice if someone could put together some nice articles in the wikipedia since what is already there is not very detailed and lacks a lot of topics. [2] seems to provide an open source solution for what vmware and parallels are already doing (opengl only no directx).

but more important, how does this work?

  • how to setup the virtual machines?
  • how to assign hardware?
  • how about memory protection (MMU security/processor rings)?
  • how about interrupt handling?
  • how do these systems work compared to each (vmware-fusion/parallels/xen-gl)?
  • how about APIs which make this all happen?

[1] http://www.parallels.com/

[2] http://www.cs.toronto.edu/~andreslc/xen-gl/

prior to todays gui toolkits console programs were used (i recall):

  • programs without any input toggle (maybe even without any output as well)
  • programs with input toggles as -x -i -v -u …
  • programs with a prompt (interactive programs with a split main loop)
  • console programs which have a gui (but still in a console) as (sys-libs/ncurses)

still all these programs (not using any X painting stuff) hat one thing in common:

  • stdout/stderr still was printed to the console, you could not miss a valuable information
  • system wide errors were also printed to all attached consoles (could be problematic on massive system error messages) since then you were spammed with error messages. for example when the harddrive produces errors due to hardware errors and the driver couldn’t read certain sectors…

today with graphical interfaces (gui) as (X or the equvalent windows 7 or mac os x) the problem is that every message a program wants to be printed to the user is using something like QMessageBox which can be very annoying if used excessiveley (for example the usage of windows xp bubble boxes – as nobody really reads them).

my fix to this issue is:

  • record all the output buffers of any graphical process (maybe with a limit of say 100kb of compressed text) for later use
  • in case of an issue, say program behaves strangely one can simply click the widget handler (that is kwin for instance) and toggle a console which contains the previously recorded buffer
  • it is very important (usability wise) to make this process very easy (_ALL_ systems i’m using FAIL BADLY in this regard).
  • copying and pasting such console outputs is horrible when using cmd.exe for example
  • i propose therefore a standard framework as QDebug for debugging on command lines using the above specifications while also adding a service as nopaste for debug output pastes

no let’s see how to attach a console (today) to a gui:

  • restart the graphical application from a console as ‘konsole’ or ‘xterm’ on linux or cmd.exe from windows (this fails of course if the button which starts the program adds different environment settings as PATH or other variables)
  • edit the shortcut (either windows or kde/linux) and click ‘execute using a console‘. (this is bad as well since you still have to restart the application).
  • often programs don’t use console output or it is disabled for a ‘release’ build completely. i don’t see any good point about disabling it completely. (quake1/quake2 … always had valuable information on the console, linux boot still does). i understand why some ppl want to hide such messages – not to disturb dump users – but stealing any debug possibility on the other hand for power and average users is an overreaction.

mumblei just had to update murmurd from 1.1.4 to 1.1.8 and since i could not use the packet manager i had to install it manually (using portage would be nice but i don’t have access to it right now).

so how is that done?

1. download mumble-1.1.8.tar.gz

2. extract it

3. download libcap-2.16.tar and extract it as welll -> ./configure && make but not make install

4. now go into the mumble source directory and edit src/murmur/murmur.pro
LIBS+= -L /home/joachim/mumble-1.1.8/libcap-2.16/libcap -lcap

INCLUDEPATH += /home/joachim/mumble-1.1.8/libcap-2.16/libcap/include/
i just added this two lines, check the path in your installation

5. now we have to invoke qmake to generate the ‘Makefile’ with
qmake main.pro CONFIG+=no-client CONFIG+=no-ice CONFIG+=no-dbus

6. finally we do
make

  • if something fails in the make step, either play with the Makefile (which will be lost after doing ‘make distclean‘ of course
  • in case you want to play with the murmur.pro you should use ‘make distclean‘ and then step 5 again, else you will not get a new Makefile and it won’t work

7. we need to give the dynamic linker the library at runtime, this is done with one little command:
export LD_LIBRARY_PATH=/home/joachim/mumble-1.1.8/libcap-2.16/libcap:$LD_LIBRARY_PATH

That’s it. Once the concpets are obvious doing things like that gets fairly easy.

today i wanted to play a game of spring [1] with a friend but it didn’t work. i was using windows xp (not linux but yes this is even more _usual_ there) and i downloaded spring with the nice little lobby called ’springlobby’. i even remembered my login for the lobby interface. after connecting we wanted to use skype which didn’t work for about 15minutes (yes i was using my linux laptop and the sound there usually suckz as it tends to block the soundcard for some unknown reason quite often). but the problem was also the new account on the other end which had to be created but which didn’t work. after a couple of skype restarts on both sides it was starting to work. (not mentioning the issue of adding a new contact…).

so the lobby was running and we could talk using skype, what else could go wrong?

right after wards i hosted a game (i didn’t expect it to work since i didn’t do any manual port forwarding for the kind of random ip i usually have). i didn’t see the ‘nat traversal’ option in springlobby first (because i tend to join other games instead of hosting exactly for this kind of issue). so the game failed but to detect it – especially if several ppl join your game – you have to launch the game. so the game starts in fullscreen (it’s an opengl application) and computes some routes (waypoints or whatever) which is important for the ai (also for the own units) for pathfinding. waiting about 40 seconds to see that the connection didn’t work.

so next i rehosted the game using ‘nat traversal’ clicked. but it didn’t work either. no error message and no diagnostics of the issue. just a silent fail – which is what i tend to hate most (except a silent fail after a timeout which i even hate more).

finally my friend tried to host a game (he is also behind NAT – but who is not nowadays?). of course the same problem – it didn’t work. but skype once the audio part worked keept working. skype managed to traverse the NAT (or at least was using a relay we didn’t know of – which is the usual fallback used by skype, see [2]).

this reminded me however of the solution for this problem i was thinking of quite some time ago when i wrote a lobbyclient myself [3] together with two friends.

the question is: “how to establish a connection before game launch?”

two answer this question we will have a look at how a game launch works right now.

  1. using springlobby to connect the the tasserver (that is the springlobby server which hosts the chat and the game preparation – a chatroom exchanging the gamedetails as map/teams and the ip of the server)
  2. in springlobby creating new game -> ‘host a game’
  3. other players see this game in a list and join it (the tasprotocol is quite ugly but this is not of interest now)
  4. now every player (not the hoster) has to click ‘ready’
  5. finally the game is launched by the hoster (the administrator of the game) and the hoster sends it’s IP along with a UDP Port to the other players.
  6. now a config file is created in every client, a special config is created for the hoster (hoster = server)
  7. the clients try to connect to the hoster (if the hoster isn’t already done with starting the game, which can take a while as seen above, the clients reconnect every few secons until a timeout of 40 seconds is reached). please note that while the player is waiting for that timeout he can’t read the chat log since he is already ingame which is usability wise a horrible thing to do. you can’t inform the player that the game won’t work (in case you know that already for some reason)
  8. now after the hoster managed to start the game the clients connect and the player label color changes from red (not connection yet) to green (player has successfully connected)
  9. in case every player is connected … the game can start

say the game connection didn’t work for at least one player and say an average game is joined by 4-8 ppl. please think of the time each player has to wait in average to detect a network issue. believe me ‘it is a lot of time‘ and this made the ‘autohost’ function very popular.

the autohost is a game hosted by a nice person which has a computer running 24/7 with some game starter script. if a programmed bot in the gameroom parses the chat of the players and detects some string as “!start” from the ‘virtual hoster’ the game is launched and spring.exe starts (that is the game binary). since spring.exe can’t be run dedicated it is not only a waste of power/bandwidth but also a waste of workspace. i expect the game to be run in the background but still this has lots of performance loss for the user.

autohosting is a nice thing for players but it seems – at least for me – be more like a workaround for a technological problem not solved properly.

the fix i was talking of is this:

when the ‘hoster’ is hosting a game the ‘hoster’ starts a udp-server on a random port (which is known after starting the server of course). the ip and port are then automatically given to the other players. now every player tries to connect to that ip:port right away without launching spring.exe and without creating a configuration file. if the connection from player to the hoster is working a green LED in the springlobby will light up and everyone sees the status immediately. when the game launches every client then connects – not the the hoster ip:port – but instead to localhost:port.

so now we need a tiny relay udp server with hole punching capabilities and as some might like UPnP network capabilities.

client1 (192.168.1.22) –lan– fritz!box (192.168.1.1) —– inet —————–many routers —————— inet —– fritz!box (192.168.1.1) —-lan— client2 (192.168.1.33)

as you can see both clients reside in the same subnets but this is no issue since both subnets (192.168.1.x/24) are in an address space which isn’t routed in the ipv4 internet definition and since both clients are routed by a router (fritzbox in this case, can be any other vendor as well) both are behind NAT (network address translation) – which is our problem in the first place.

our small udpserver (i call it “udpPuncher“) would require:

  • relaying udp packets from one ip to another, no parsing of the udp packets at all
  • libNAT (to have UPnP capabilities)
  • holepunching (a udp nat traversal technique which is quite common)
  • and some interface (either a socket or a dbus like interface) to control and query the relay
  • some easy logic to report to the springlobby that the playerX has successfully connected to the hoster

so you might say that is no new technology.

  • maybe not but don’t forget that most games are hosted by expensive servers (battle.net from blizzard or others). some games have a dedicated client (very often a even a linux client) you can install and run on a internetserver which is not behind a NAT and which has lots of bandwidth (most important aspect here is the upload speed and latency).

i’ve never seen such a udpserver or library. all i know are a couple of projects trying to solve that issue. take sip as an example – they have the same problem there and they often give you a stun server (udp holepunching) to relay connection establishment.

there was a nice project i came along [4] which checked the NAT capabilities of your own network (there was a linux and a windows client). i’m not sure about the results but this could be used to qualify the network NAT type in an attempt to write the not yet written udpPuncher.

ipv6 would be a nice solution but i doubt this will be here soon as nobody seems to have interest in ipv6.

[1] http://springrts.com/

[2] http://en.wikipedia.org/wiki/Skype_protocol

[3] http://code.google.com/p/qtlobby/

[4] http://nattest.net.in.tum.de/?mod=infos&lan=de

UPDATE:

I just found out that [4] is not new at all (maybe it is but not but at least for me it is), i’ve read [5] some long time ago but didn’t remember it. Now here is a very detailed documentation about NAT with illustrated (but not animated ;-P) examples of usage:

[5] http://www.brynosaurus.com/pub/net/p2pnat/

a problem in visualizing maps is how to render the height differences. the spring rts has a very nice solution to this issue, see yourself:

hill, springrts.orghill with heightmap color overlay, http://springrts.com/

the next two pictures are ordinary renderings. this kind of rendering is commonly used on printouts. this is nice when having a big map in your hand and if the detail level is as low as in the first picture below.

random height field image from the web

however if the detail level increases as in the next picture (opencyclemap.org renderer)  the usability gets lost. at least on very small displays as handhelds having sunlight and reflections on the display.

hill4

i don’t like using the opencyclemap renderer for biking tours. i’ve tested this quite some times with my openmoko device with the program called: tangoGPS

i would love to have an osm renderer using the spring rts ‘colorful heightmap’ renderer. i could think of a switch between normal osm maps and the heightfield renderer of spring. or even an overlay with local rendering would be cool.

maybe we can come up with such a renderer…

gpl vs others

the gnu gnu

the gnu gnu

i’ve always followed minix and linux discussions since linus and andrew had funny conversations about general development goals as the kernel architecture to be precise. reading ‘just for fun’ was a great pleasure and it made one thing clear – having linux using the gpl was an important coincidence for it’s support.

there is the bsd family of unix systems of which i’ve learned they have a very long history back to the beginning of unix. when linux emerged there was already a completely free and working unix to that time, did you know that? for the older readers this might be no surprise but for me it was.

so one should wonder why linux had such great success while bsd did not. i think the main issue here is the license. the bsd license is very open and if mankind changes towards good it might get the license of choise. since that did not happen yet let’s see what the bsd license can do for you:

  • you can create closed source programs and sell them
  • you are not enforced to release the source-code on request

these two paragraphs in the bsd license enabled apple to create mac os x – a unix system using a unix environment on top of the mach kernel. i love mac os x so don’t get this wrong but i doubt this is how software development should be. so bsd still has lot’s of fans and development goes on but compared to the increase in linux usage it is minor. so i keep asking myself why?

so what should be better about the gpl compared to the bsd license? the gpl license forces everyone to release the sourcecode of the program on request.

this is very important and richard stallman is to be thanked for this wise concept. it is working. i don’t want to do open source or ‘open and free software’ propaganda here. but looking at the usage speaks for itself.

i think it is historically funny that linux made it and neither bsd nor minix. (yes both systems are cool and are in use but i think about mainstream usage here). i love minix for it’s design and one day when windows vanishes from the desktop we can expect new different types of hardware as arm or any platform other than x86 i could think of a linux modification which implements the core concepts of minix into a linux system.

it is somehow ironic to see that minix made the misstake chosing the bsd license. it seems the author of minix goes either egoistic proprietary or imprudent free.

there are of course other factors behind the success of linux as for example the community but i won’t discuss this here.

just a few thoughts why linux is not on the desktop yet.

  • graphic drivers suck (except those from intel and some other vendors’ old cards)
  • wireless lan (networkmanager is not very good)
  • updates (not reinstallations of new versions) tend to screw up the whole system
  • the security mechanisms are not always working (getting better over the last years of course) but still one needs to be a pro to do them correctly without breaking the whole system
  • backups: dependent on your distribution this works or does not work well

in other places i see pretty good support in linux for the desktop use case. still those things i mentioned are harmful!

btw: i would like to mention that some years ago i would have argued that bringing the games to linux would make linux the ‘os of choice’. this still did not happen for various reasons. but as time changed i would say this argument is not true anymore since ppl tend to have more than one computer or use game consoles for gaming.

Older Posts »