How to install skype on debian wheezy with x86-64 / amd64 machine

I have been trying to install skype on my debian wheezy installation on amd64 a.k.a. x86-64 bit machine. It has taken several days of my productive time just to install skype just because the skype version available for download on Linux Debian is an i386 package and due to dependencies issues, it fails to install. Even though the download page says that the package is for multiarch but actually it is a i386 based package. I have tried installing other .deb packages available on skype.com but still it does not configure the skype. dpkg reports that it is leaving the package unconfigured and suggests that you should run:

sudo apt-get install -f

But that also does not help as it simply uninstalls skype. I have tried the instructions as listed here http://wiki.debian.org/skype but that simply does not help.

Finally the options that I was left with was:

  1. Upgrade my whole system to sid (which at the time of writing is quite unstable, whicih usually is the case after a release).
  2. Make my system dual boot with sid and the other as wheezy so that I have at least one OS running even if sid breaks.
  3. The last option was to install sid in a chroot and run skype from within chroot.

Even though the last option seems inelegant but that is the best unless you want to live on the edge.

To setup a sid chroot one can use debootstrap which makes it easier to setup chroot and follow the instructions listed here:

http://wiki.debian.org/Debootstrap

Once that is done, you can also install schroot package which makes it easier to run chroot. Once I did that, I was still unable to run skype because the xserver would not allow connection to the chrooted system so that the gui for skype shows.

To be able to run skype, you first need to allow xserver to let a client connect. To do so simply run the following on the main system:

xhost +

Viola! Now the gui for skype shows up but wait … the sound card still does not work.

For it make sure you have libpulse installed. If it is not installed, install it using:

apt-get install libpulse0:i386

The other thing that you need to do is configure alsa.

. Configure alsa in the chroot to use pulse by default by creating/editing /etc/asound.conf. Put the following in the file asound.conf:

pcm.pulse {
    type pulse
}
ctl.pulse {
    type pulse
}
pcm.!default {
    type pulse
}
ctl.!default {
    type pulse
}

The other thing that you might need to do is copy the file /var/lib/dbus/machine-id from host to chrooted system.

Once you do these steps run skype again and it should now have sound working on skype. This last part is based on the following post:

http://blog.einval.com/debian/misc/pulseaudio_chroot.comments

Hopefully once you have this, the skype should be running on your debian installation 🙂

Why debian rocks

It has been quite some time, actually years, since I started using Debian. Earlier I have used various flavors of Linux like SuSE, Red Hat, RHEL, Fedora, Ubuntoo but my experience with Debian has been so far the best. I just thought to write the reasons for which I really like Debian compared to other systems.

1. Excellent package management tools

I find that the package management tools that Debian offers is really fantastic. There are host of tools like Synaptic, Aptitude, Apt, dpkg, dselect etc. which one can choose based on how much one is comfortable with command line, TUI or GUI. One can easily choose and configure from where to install the package i.e. CD, standard Debian repositories hosted around the world, or some special Debian package repositories. Given I have my Debian CDs downloaded in ISO format, I can choose to loop mount them and install packages from them without the need to put the CDs for installation every time into the CDROM and without the need to download the package from internet every time. Above all the package dependencies are automatically resolved and installed / removed making the installation process a real breeze.

Apart from this there are host of packages like checkinstall (although available on other systems as well), localepurge, module assistant, debootstrap, pbuilder etc., which work so well in conjugation with other Debian package management tools that it is hard to describe in just one line or paragraph. Each of these tools really deserve a separate blog entry 🙂

In the past I have had real troubles specially with RPMS and local self installed packages cluttering the system, unresolved package dependencies that I felt a lot many times that I am spending too much time maintaining my Linux system than actually doing some work and had a strong desire to switch back to Windows.

2. Flexibility with the choice of installation of debian itself

Debian offers various ways to install Debian. One can choose either installing directly from internet with a minimal net install CD or one can install using the CD or DVD downloaded from internet or even from CD / DVD images downloaded using Jigdo. I think so is the case with other distributions, but I found installation of Debian offers much more flexibility. There are distributions like Gentoo which even build complete packages from sources but I believe that it is a waste of time and bandwidth unless you really want every bit of your computer resource to be utilized to its maximum possible extent.

3. Very active community of Users and Developers

The Debian users / developers community is so huge and active that most problems that you are going to face while installation, would have already been resolved or someone from the community will be able to help you out.

4. Larger support base

A lot of companies which provide support for their H/W on Linux, usually provide support for Debian apart from other major Linux distributions. That is at least they provide Debian specific packages or installers which specifically support Debian.

5. More suitable for programming and development

In the past having used SuSE, which offered a host of gizmo stuff for managing, installation and other utilities by default, it made me feel that I was no longer in control of my Linux System. Everything was so opaque and hidden from the user. Debian is simple in comparison and which is why it is so powerful. I really feel I am in control of my system.

6. Ports available for a large number of architectures and target device

Debian is available for a variety of architectures and platforms, which further increases the user base as well as the support base. Ports of debian exist for most common architectures like ARM, MIPS, PPC, x86, x86_64 etc. There are variety of GNU/Linux distribution which are Debian based, most notable of them is Ubuntoo, which further increases the support and user base.

The net result of having so many ports of debian is that one can run Debian on systems ranging from Servers to Desktops to Embedded Devices.

Some Debian specific useful links

http://www.debian-administration.org/

http://wiki.debian.org/

http://www.emdebian.org/

http://atterer.net/jigdo/

Hardware Accelerated Virtualization with QEMU and KVM

In this post I will take you through a series of steps for setting up hardware accelerated virtualization on your PC, if it is supported, along with some background on virtualization. The assumption that I make here is that you already have a Intel/ AMD based processor with virtualization support with a GNU/Linux installation (preferably Debian).

Although it may sound little tricky but believe me, it is not as difficult to set it up, as it seems, given you follow the right steps.

A Must Read for those are planning to buy new PC hardware

Even if you don’t intend to set up virtualization on your PC, it will be a good read and probably you will think about Virtualization support before buying a new PC.

Why should You care?

Usually people prefer to stick with an Operating System which they are more comfortable with and even though they may setup a dual boot machine, they hate to switch between them frequently. At the same time, once in a while you require the other OS for certain things…for example to test some software, to learn an OS (for example if you are a Windows user and want to familiarize yourself with GNU/Linux), to isolate an environment for a software (say a crack for a software which you do not want to infect your windows installation 🙂 ) etc. , Thus having Hardware Accelerated Virtualization will definitely make the experience of using a Virtual or Guest OS a breeze and will avoid any kind of frustation due to slow emualation without h/w accelerated virtualization.

What is Virtualization?

Virtualization is a mechanism which allows running one kind of environment inside another environment. It can be of several types:

1. API Virtualization:

It is quite like cygwin, where GNU/Linux API calls are translated to equivalent windows API calls. But the apps need recompilation to run on cygwin. Another example is WINE (windows emulator) which does the reverse, i.e it runs unmodified windows applications to be run on Linux.

2. OS Virtualization / Full Virtualization:

It is the kind of virtualization where a complete Operating System runs within another Operating System. It could be any combination of OS (Linux inside Linux, Windows inside Linux, Windows inside Windows with 32, b4 bit combinations as well). it is most popular form of virtualization and is usually required by a lot of people for testing softwares. Examples of this kind of virtualization are: QEMU, VMWare workstation

3. OS Level Virtualization:

It is the application level virtualization provided by the OS itself for the applications. Examples of this include ‘chroot’ jail, where an application runs inside a ‘jail’ with access to the OS resources only in that jail. This is also useful for application testing.

4. Emulators:

This kind of virtualization is usually referred, if not limited to, to the kind of virtualization where a complete environment is replicated. An example of this is Palm OS emulator, Android emulator, Nintendo Emulator etc. Even QEMU is an example of Emulator but it is usually referred to in the context of x86 instruction emulation or OS /Full Virtualization.

5. Desktop Virtualization:

In this kind of virtualization the desktop of a user is emulated / exported to another remote system from where it can be manipulated. Examples of this are: VNC viewer, Windows Remote Desktop. I would even consider eyeOS to be a kind of desktop virtualization.

For a detailed and complete list of different types of Virtualization, refer to Wikipedia article http://en.wikipedia.org/wiki/Virtualization

Hardware Accelerated Virtualization

Hardware Accelerated Virtualization is a kind of Full Virtualization which is accelerated with some hardware support. Not too long ago, it was difficult to do emulation of certain kind of instructions, without modifications to the Guest OS. The requirement for a system to be really called Full Virtualization system is that the Guest OS shouldn’t be modified. Apparently doing this was not so easy and even if implemented, the instructions were trapped and then emulated in software itself. This made the performance of a Virtual OS really slow in comparison to the native OS running on the system.

Hardware accelerated virtualization, solved this problem by proving certain instructions / extensions so that the ‘trap and emulate’ of instructions could be done in hardware. AMD and Intel processor added extensions called vmx or svm respectively to provide support for hardware assisted virtualization. To know if your processor supports these extensions type the following on a shell prompt:

$cat /proc/cpuinfo | grep “vmx \| svm”


flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm tpr_shadow vnmi flexpriority

flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm tpr_shadow vnmi flexpriority

Essentially the command above lists the info about your CPU and greps for flag which tells if virtualization extension is supported or not.

In short Hardware Accelerated Virtualization dramatically increases the speed of a ‘Guest OS’, so that it is as much responsive and usable as the Native / Host OS.

Hardware Requirements for Hardware Accelerated virtualization

The requirements for hardware accelerated virtualization are listed below:

  1. CPU support (found using cat /proc/cpuinfo | grep “vmx \| svm”)
  2. BIOS support –> Usually most recent Motherboards which support Core2 Duo processors have virtualization support but cross check this information by reading the motherboard manual (available online for most popular motherboard manufacturers).

Software Requirements for Hardware Accelerated virtualization

  1. QEMU –> Qemu is the emulator which acts as the emulator on which the virtualized or ‘Guest’ OS runs. It is similar to VMware client
  2. Linux kernel supporting kvm
  3. kvm.ko and kvm_intel.ko or kvm_amd.ko kernel modules which utilize the vmx | svm capability for h/w acceleration
  4. An OS image to run / test.

How to set up hardware virtualization:

Assuming you have hardware which is capable of accelerating virtualization,

Warning: Since the exact steps to setup hardware virtualization could vary from one Linux distribution to another, the steps below are only indicative and you may need to figure out how to set it up for your distribution. But the principle remains the same. The configuration on which I have been able to setup virtualization is listed below:

Intel Core2 Duo E8400 (3.0 Ghz). –> supports vmx extension

Asus P5P43TD motherboard –> BIOS for this motherboard does support virtualization and is enabled by default)

Debian 5.0.3 (lenny)

At the time of writing this post, kvm support in Qemu downloaded from Debian repository (0.9.1-10lenny1) is broken. Ideally one should be able to download and install Qemu and run it without any issues and Qemu will automatically use h/w acceleration, but that is not the case and hence you require some changes to your setup.

  • Compile 2.6.32 kernel, with Virtualization support enabled. Please note that the kernel that we build here is not the official Debian kernel wherein certain code is removed from mainline kernel to keep up with the Debian software policy.

      • $tar -jvxf linux-2.6.32.2.tar.bz2
      • cd linux-2.6.32.2
    • Copy your existing kernel config to untarred folder i.e. linux-2.6.32.2/.config
    • Run menuconfig, which is a ncurses based configuration chooser (lets you choose various features to be enabled / disabled in the Linux kernel). If it asks for questions for enabling / disabling of features, just choose the default, unless you know what you are doing.
      • make menuconfig
    • Select Virtualization support in the menuconfig (see the screenshots below).
    • Install any build dependencies. This will install g++
      • sudo apt-get install build-essential fakeroot
    • Compile and install the kernel the Debian way or you can compile it the usual way and install it (in that case skip this step). The following step will build the kernel and automatically do the changes to your bootloader (grub or lilo), copy the kernel modules into /lib/modules/2.6.32.2/, setup links in / pointing to appropriate vmlinuz, prepare initrd automatically. This actually makes building kernel very easy on a debian system.
      • fakeroot make-kpkg –initrd –revision=custom.1.0 kernel_image
      • sudo dpkg -i ../linux-image-2.6.18_custom.1.0_i386.deb

make menuconfig screen - 2

make menuconfig screen - 2

Screenshot when kernel source is configured with make menuconfig for virtualization support

  • Download, build and install the qemu-kvm package

    • Download the qemu-kvm package from http://sourceforge.net/projects/kvm/files/. In my case I downloaded qemu-kvm-0.12.1.1.tar.gz, which works fine for me.
    • Ensure that package checkinstall is already installed on your system. This is not essential as you can install a package on your system using usual ‘make install’ which will simply copy the required files in appropriate folders. But installing it through checkinstall ensures that you can get the status of your installed package and you can remove it like any standard debian package. To install ‘checkinstall’:
      • sudo apt-get install checkinstall
    • Do
      • $qemu-kvm-0.12.1.1.tar.gz
      • cd qemu-kvm-0.12.1.1
      • ./configure
      • make
      • checkinstall
    • Chekinstall asks some questions like the name of the package etc. which you can provide so as to keep track of the installed packages.
    • Once you do dpkg –list it shows the following:
      • dpkg –list qemu-kvm
        Desired=Unknown/Install/Remove/Purge/Hold
        | Status=Not/Inst/Cfg-files/Unpacked/Failed-cfg/Half-inst/trig-aWait/Trig-pend
        |/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
        ||/ Name                              Version                           Description
        +++-=================================-=================================-==================================================================================
        ii  qemu-kvm                          0.12.1.1-1                        qemu-self-compiled
    • To see the list of files installed by this package, run the folowing command:
      • dpkg –list qemu-kvm
      • This lists a lot of files of which the following is important
      • ….
      • …..
      • …..
      • /usr/local/bin/qemu-system-x86_64
        /usr/local/bin/qemu-nbd
        /usr/local/bin/qemu-io
        /usr/local/bin/qemu-img
        /etc/init.d/qemu-kvm
  • Now reboot your system
  • Add the user to kvm group. This is essential so that the qemu can read the device /dev/kvm, which by default has permissions 600. Simply changing the permission to 666 is not a good option as this will be reset to 600 on next reboot.
    • sudo adduser divkis01 kvm
  • Before you can us QEMU + KVM, you need to have an OS image to be able to boot it with QEMU. To prepare images,
  • First make an ISO image of your XP, Ubuntoo CD or alternatively if you already have an Iso Image skip this step
    • dd if=/dev/cdrom of=~/MyMachines/winxp.iso
  • Now create an image in which the OS installation will be done.
    • qemu-img create -f qcow2 winxp_x86.img 10G
  • Install the OS on the image created in last step
    • qemu-system-x86_64 -hda winxp_x86.img -cdrom ~/MyMachines/winxp.iso -boot d -m 512
  • Once the installation is complete, you are ready to run Qemu with hardware acceleration. You can boot the OS using the following command:
    • qemu-system-x86_64 ~/MyMachines/windows/winxp_x86.img

See the screen shots below which shows Windows XP and Ubuntoo booted on a Debian GNU/Linux host

QEMU running Windows and Ubuntoo images on Debian host

Caveats

  • If you see that your native OS (on which you are running QMU) is fast enough but the guest OS runing on QEMU is too slow, then it is possible that hardware acceleration is not being used. There are several ways to figure out if that is the case or not.
    • Listing the currently loaded module and grepping for kvm, should show non zero entries in the right most column. For example on my machine, it shows:
      • lsmod | grep kvm
        kvm_intel              31979  6
        kvm                   181149  1 kvm_intel
    • On running QEMU, if QEMU complains with the following message
      • qemu-system-x86_64 ~/MyMachines/Linux/ubuntoo-9.10.x86.img &
        divkis01@divkis01-pc:/home/data/downloads/isos/debian-x86$ open /dev/kvm: No such file or directory
        Could not initialize KVM, will disable KVM support
    • The performance is too low of the guest OS. I have found drastic difference at least 10x perceived difference with and without hardware acceleration
  • The reason for h/w acceleration not available could be due to any of the following reasons:
    • kvm not properly installed
    • user running QEMU is not part of kvm group i.e. the user does not have access to device /dev/kvm
    • kvm is installed but the kernel modules for kvm (kvm.ko and kvm_intel.ko / kvm_amd.ko) are not properly loaded
    • The installed kernel does not have kvm built as module
    • Or probably h/w acceleration is not supported by your processor or motherboard.

Useful Links

http://en.wikipedia.org/wiki/Hardware-assisted_virtualization

http://www.linux-kvm.org/page/Main_Page

http://www.nongnu.org/qemu/user-doc.html

http://kernel-handbook.alioth.debian.org/

http://wiki.debian.org/QEMU

If you face any difficulty setting up kvm or QEMU, don’t hesitate to send me questions. I will be glad to help. And if you find this page useful, please feel free to drop a comment.

Happy QEMUing!!!!

    2. Download, build and install the qemu-kvm package

Why I like Linux and hate Windows

Once in a while you will find someone who is a Linux geek and claims that he hates windows and loves Linux. A lot many times I have found people who say so give vague reasons for the bias or probably because hating windows and using Linux makes them appear more geeky. Honestly I was not a Linux lover but I have really started using Linux because I think I was constantly being pushed to a corner by Windows and its allies (read antivirus, cd burning softwares, flash et al.). Today I thought to just list what really pushed me to a corner and how Linux solves a lot of my problems.

10 Reasons for Hating Windows:

1. Windows updates: Every once in a while Windows starts downloading updates, without asking the user, and hence utilizing all the network bandwidth, just when you need it. Even if you have a genuine Windows installation, windows update is a painful process. In comparison, Linux also have security and other updates available and similar notification manager on many distros but it

  • Doesn’t nag you repeatedly
  • You can update your installation when you are not using it, say in the night when you are sleeping

2. Windows without Antivirus is useless: I guess that explains it all. Even if you have ‘genuine’ Windows installation, it is a dead rat, without an antivirus software. Very soon your Windows will get infected even if you don’t download pirated softwares either from bittorrent clients or from various other sites. This is because sooner or later one tends to use USB drives for transferring data to and from other computers, owned by others, which are already infected. The other reason is that most of the times, windows installation has softwares downloaded from all over the internet, some of them pre infected with malware, trojans etc. In contrast on Linux, say Debian, there are standard repositories from where you would download the required softwares and most of these repositories are authentic places to download Linux packages from.

3. Windows with Antivirus is even more useless: The reason is that most of the times, the antivirus softwares tend to hog the CPU and other system resources so much that no matter whatever processing power you have gets utilized in either scanning the system, downloads, sites, mails etc. The remaining CPU time is utilized in downloading updates for Antivirus and Windows updates. Updates for Antivirus sometimes are so big that it takes quite a while on broadband currently in India to update them.

4. Other useful and general purpose apps are not installed on Windows by default: Most of the times, you would need a PDF reader/ writer, CD-DVD Writing Software, Office apps like Word processor, Presentation and Spreadsheet, Text Editor, Video player for playing various videos in variety of formats with inbuilt / standard codecs pre-installed, bittorrent client, Iso Image mounting software, Image manipulation program, etc. These are required even by most people who are not computer geeks and it sounds really silly to pay again for these utilities which should be part of OS. For a lay man what good is an OS, if it cannot do some simple task like playing of videos, music, viewing and manipulating pictures etc. If Windows provides utilities for these by default, I think it would definitely boost the number of people who would want to buy Windows.

Office Apps like Word, Spreadsheet and presentation are a must for most people and I believe if Windows starts installing these apps by default as part of Windows installation, of course without extra charge on the licence, there would be more people willing to buy ‘genuine’ windows copy. Some would say that so is the case with Linux but I think Linux model is completely different. There is no default. Softwares are installed based on what distribution you are choosing and for that distribution, what are the softwares that get installed as part of OS installation. I call this Linux model is WYWIWYG i.e.  What You Want Is What You Get. 🙂 More on Office apps later in the article.

5. Default browser, i.e. Internet Explorer is shit: I find the features and overall usability of IE way behind what other browsers in particular Firefox provides. Though it is a personal preference but IE is still trying to catch up with Firefox. In comparison Firefox provides so many features and plugins using which one can enhance the usability and features of Firefox and customize it to his needs. For example I am yet to find a good downloader with IE. It is the same old downloader with IE that in case of interruption has to start all over again. I know I can give many other reasons as well but let us just consider this to be a personal preference for now.

6. It is a fashion to update softwares now: It appears now that these days it is a fashion to update every software installed on the system. On Windows most of the times, there are lots of icons in the ‘tray’ i.e. at the right most, bottom most corner of the display. Let me count some most common softwares requiring update and IMHO the most pestering ones:,

1. Windows update

2. Antivirus update

3. Nero update

4. Java update

5. Adobe Flash update

7. Windows booting till the point it becomes usable, is too slow: The reason is that even after Windows get booted up, there are lots of default startup services and startup softwares showing up in status bar, which need to be initialized before the system becomes usable.

8. No Good command line interface for power users: The default command line interface on Windows is ‘cmd’ which is really stupid. There are not many commands supported on ‘cmd’. In contrast, even on a MacOS, there is a terminal which almost has all the features of a shell on a Linux system. This is useful in those cases where a user doesn’t want to use GUI but wants to use command line interface which is specially useful during programming.

9. Performance degrades over a period of time: My experience with Windows has been that mostly the performance of a windows installation degrades severely over a period of time and slowly it becomes completely unusable. I really don’t know the reason for this but my guess is that it could be due to many reasons:

1. Windows updates

2. Bloated registry due to too many installed softwares

3. Antivirus updates bloat

4. Viruses et. al.

5. Disk fragmentation

6. Some unknown and /or hidden reasons like Windows deliberately doing it so, so that you buy a new version of Windows with a new hardware, most probably Intel (together called as Wintel). Who knows it could be a hidden strategy of MS as the source code of the OS is not open.

10. Miscellaneous: Other things that I really dislike in Windows are: Registry mechanism: It is a really weird way of storing OS, applications and other settings. It is not easily readable or writable and you really have to be a Windows OS / driver developer to be able to edit / modify the settings in the registry. Also registry bloats over a period of time and affects the performance of OS. Environment variables: The Windows way of setting environment variables is really weird. I think Windows shouldn’t have had any feature like this, or if they wanted to have then they should have created a good shell inbuilt into windows, quite like Linux. Frequent Hangs: One thing that every windows user knows is how to ‘try to kill’ a hung process. You do CTRL-ATL-DELETE–> open task manager and kill a hung process. With this, either your system will stop responding, or wouldn’t do anything or kill the explorer process (which is quite like the Window Manager on Linux) as well. As a last resort, you end up doing hard reset.

10 Reasons for Loving Linux:

1. Linux OS updates are optional: Apart from regular security fixes, most updates are optional and even if you want to update your OS, you can schedule them when you are not going to use your PC.

2. Mostly no requirement of Antivirus: This is not because there cannot be Viruses for Linux, but most of the times, a person operates as a user and not root, the damage is restricted. Also there are so many flavors of Linux that it is hard to infect them. May be only a few. In comparison the primary user on Windows is mostly the administrator and thus viruses can infect easily. On Linux softwares are downloaded from standard repositories which are relatively safe and are community managed.

3. Most useful Apps are installed by default on most ‘standard’ installations of various Linux distributions. Office apps, CD/DVD writing softwares, image manipulation programs, bittorrent client, video and music player for almost all formats, text editors etc are pre-installed / or are readily available. Though some of them are not so easy to use, i.e their UI is either not so good or one has to read some man page to read the equivalent command line functioning, but nowadays Linux has really improved on a lot of UI and presentation aspects.

4. Default browser on most distros are pretty good: The default browser on various distros is usually Firefox or its variant. The only fallout is that the flash player does not work properly on some browsers. I think this requires some solution on Linux.

5. Boot time and logging time is very less: Since there are usually no apps to be started during login process, the boot and login time on Linux is really very less. Also one has a choice to modify what processes, services and daemons to start when Linux boots, which makes it really flexible. Based on one’s liking, one can choose how many such processes should be started during boot+login time, thus making Linux booting process really fast and flexible.

6. Good command line interface: Almost all distros have a good shell like bash pre-installed which is a real breeze to use, specially for power users. find, ls, grep, cat, less, more, pipe, echo etc. are so common utilities that they are a must on any OS.

7. No degradation in performance over time: There is usually no degradation in performance of a Linux OS. The system is as responsive and usable even if you have Linux running for a year. In comparison, Windows require some sort of reinstall, restore, recover in less than a year.

8. No nagging softwares: On Linux you will never be nagged by an installation of an app to update, buy, pop up or some such nuisances. If you know what I mean, then I guess you would have realized that how much painful the nagging can become.

9. Miscellaneous:

  • Option to recompile kernel to make the most out of your hardware. I will explain why this is needed some other time in a different article altogether.
  • Programming is easy. Most compilers, editors, programming environments and utilities are free and are readily available. On windows this is really cumbersome. Even if you have to write a hello world program, you need to open some IDE like Visual studio, create a project and then do some settings to the project and then only you can start writing a small hello world program.
  • Killing a process is quite quick.
  • Permissions and security: Unlike Windows, rules for permissions, security etc, are very well-defined. On Windows I have problem accessing my external hard drive across different Windows machines. And I don’t really know why is that the case. It shows locks on certain directories and some are simply not accessible.
  • Multiple virtual desktops (also available on windows but only through specialized softwares)

10. GNU/Linux is free: Last but not the least, GNU/Linux is free.

Over the years Linux has evolved a lot and a lot of hardware manufacturers contribute their drivers for their devices to be installed on Linux. UI and other regular features have also matured. I would rather write another article on what is it that has really come of age on Linux and what still requires rework, to completely replace Windows as an OS for an average user.

Currently I run a GNU/Linux Debian running Linux kernel 2.6.32 and I am really happy with the system. Comments and clarifications are most welcome 🙂