RSS Feed

Category Archives: review

A brief comparison of GTK+ and Qt


I used to like C language, because it is a basic of programming, and it is portable, and it is low-level. When writing program with C language, it is just like showing off your advanced programming skill, how you manage the memory, how you manage the pointers and creating the linked list. However, in terms of efficiency, C++ is much more powerful, because of object-oriented and the syntax.

Because I like C language, so I chose GTK+ over Qt for long time ago. Not only that, I am also fond of GTK+ desktop environments like GNOME, Xfce4, LXDE, Cinnamon, but not Mate. I feel that KDE is heavy weight.

One of my personal projects, Med, which was written with GTK+, had some issues with multi-threading. I believe that my engine part does not have any problem. As a result, the suspicious part is the GTK+. The program crash without symptoms, and difficult to reproduce. Therefore, I decided to re-write the UI with Qt. If, Qt also produces the same problem, meaning my algorithm is problematic.

In my opinion, GTK+ is straight forward, because of procedural paradigm. Therefore, it is easy to learn and implement. The UI can be design with Glade. But I feel that it is still lack of something, such as button click callback function. Besides that, though there is gtkmm (C++ interface of GTK+), the library like WebKitGTK+ does not have the documentation for gtkmm (I believe still can work). In summary, GTK+ is slower as writing the code in C language.

On the other hand, Qt is more complicated. To use it, better to use qmake project file to generate the Makefile, or use the CMake, so that we can include the necessary headers and link with necessary libraries. And we also need to use some macro. This makes me feel that the coding is very Qt-oriented, not just a C++ language. However, in terms of design, I feel that Qt Designer is much easier. But GTK+ and Qt layout uses different concept.

Though GTK+ and Qt are both object oriented, GTK+ is in the library level yet Qt is in the language level. It is easier to write inherited classes in Qt, and easily make changes at the language level.

As a conclusion, Qt is better than GTK+ for development as C++ is better than C.

Multilingual programming


Recently I involve in various projects. And they are using different technologies. I am fervent in programming because it conforms to my theological and philosophical perspective.

The languages and technology I am currently using: AngularJS and NodeJS, .NET MVC with C# Mono, and Ruby on Rails. Other related technologies: Nginx, AWS, migrations, Bootstrap CSS, etc. Besides that, my background is strong fundamental C, C++, and PHP skills; have good experience on Python; some experiences on Java, Android, Perl, and VB Script.

Since the advancement of cloud computing, everything is about server and client. HTML, JavaScript, and CSS are the basic of the basics. Furthermore, I am a Linux user, working on sysadmin tasks becomes much easier.

Naming convention and syntax

Involving in various languages and different development frameworks, there is something very important, that is, naming convention. Unlike syntax, where syntax is the language level rules, naming convention is the framework level rules. That means, when using a certain framework, you should follow the naming convention, especially MVC framework. Because by following naming convention (and file structure as well), the framework will use the corresponding database, view page, and controller as well. That is why, you follow it, your development will work faster, need not to care about the internal algorithms.

And some of the naming conventions, is just the style, not really related to the framework. They are “recommended”, instead of “required”. You must know how to differentiate these two.

Let me explain why the naming convention matters. Web technology is a very interesting area. If you open an HTML file, you will see three kinds of syntaxes: HTML, JavaScript, and CSS. Yes, these kinds of syntaxes exist in one file. JavaScript usually use the camel case, so do HTML DOM methods. CSS selector has no requirement, you can use camel case as well, but it is usually hyphenated identifiers, eg foo-bar instead of fooBar. HTML has no restriction. But the attributes are usually hyphenated, yet the value can be camel case or hyphenated. If it is JavaScript related, then camelCase; if CSS, hyphenated. This is how HTML works.

The above is purely client side HTML. For the server side, we usually use a template engine or template system. MVC uses Razor: Rails uses ERB; ExpressJS uses Jade; etc. So, when using these engines, new syntax comes in. Some template engines allow logical statements written in the view, such as Razor and ERB. As a result, you will see pascal case in Razor, snake case in ERB. So, by looking at these naming conventions and syntaxes, you will know what languages being used and what you should do. On the other hand, AngularJS has a very neat template design. No logical statements allowed in the template. Consequently, the template is very neat!

Pascal case and camel case

I don’t like Microsoft, but I admit that Microsoft has its own strength in some technologies. (Else you will not see Mono in Linux.)

Microsoft uses Hungarian notations in C/C++ documentation, for instance, “szName” means identifier “Name” with zero-terminated string data type. It is less human readable. Currently there are a lot of high level languages, thus human readable is required so EVERYONE can code. That is why the methods/functions are verbs like getSomething, setSomething, countSomething, addSomething, removeSomething, clearSomething, etc.

Microsoft uses PascalCase; JavaScript uses camelCase. Because I am used to work on JavaScript and HTML DOM more, that is why I prefer camelCase. Microsoft doesn’t disallow camelCase, but the PascalCase is a suggested naming convention. The reason I prefer camelCase rather than PascalCase is because, uppercase of the first later like

MyType

means data type. And

myData

means variable.

So, using the uppercase of the first letter allows me to differentiate my source code easily. However, Microsoft .NET C# uses PascalCase.

So, the question is, should I follow PascalCase or camelCase when using C#? After working with so many projects, I decided to follow the naming convention as recommended. Just use PascalCase as it is recommended. So that, I can feel the conformity instead of alienation. So, how to differentiate the data type and the variable? That is an easy solution. Just recognise them semantically! Because the programming languages, at the end, are still human readable language.

Editor

Lastly, I have to talk about the text editor. Instead of IDE, I prefer my favourite text editor, which can split the view into multiple unlimited windows, or clone multiple unlimited windows. Not only that, the text editor has syntax highlighting in multiple languages in one file like HTML. At the same time, open different file types like Ruby, C#, JavaScript, CoffeeScript, CSS, SASS, SCSS, it can still differentiate them. None of the editor can beat it! Yah! That is Emacs. Emacs is the best programmer editor!

I like Vim too. There is always Emacs and Vim war. I like Vim, as it is a general text editor. Edit any text with keyboard only. Edit configuration files through SSH, Vim is the best. Yet, Emacs is the programmer editor. It takes care the programming language indentation smartly. This is what I need! Highlight all and TAB, everything is formatted!

Dell Vostro 5459 review and setup


Due to the changes of the career, I invested on Dell Vostro 5459, after a long survey. I chose it because it is compatible to Linux. The compatibility to Linux meaning that, all the hardware devices are accessible by Linux. Besides that, it has the NVIDIA graphic card, which allows me to use GPGPU to do my research and study. Moreover, I can play high quality 3D graphics games.

Ubuntu

So, the laptop I bought was pre-installed with Ubuntu. And, I was impressed by the Ubuntu first boot video, which can be found here.

Partition and bootloader

It is new laptop, thus the hard disk partitioning table is using GPT format instead of MBR format. And the laptop uses UEFI boot system by default. It will be very convenient to have multiboot with several OSes.

In order to do partitioning, I used my favourite tool, SystemRescueCD. But I failed to run the X11 window, due to the very new NVIDIA graphic card. (I believe I can run the X11 now.)

Before partitioning and formatting the hard disk, I checked the xorg.conf from the existing Ubuntu, believed that it can help me to figure out how to start X11 window in SystemRescueCD. Then I discovered that /etc/X11/xorg.conf does not exist. This is a very important point.

Consequently, I used the command-line interface to re-partitioning the hard disk. Because I was going to install Windows and Arch Linux on it.

Windows

Though I prefer Linux, Ubuntu not my primary OS. So, I have to install the Arch Linux. Before installing Arch Linux, due to the luxurious hardware specification, I intended to install Windows 7. The laptop does not have USB2.0, but only USB3.0, and I didn’t want to install Windows 7 through external DVD-ROM, because I didn’t want to burn Windows 7 to a DVD. As a result, Windows 7 with USB3.0 cannot be installed. Looking for the solution, extra drivers are required. Thus, I gave up Windows 7 and tried Windows 8.1. (Sorry, Windows 8 and 10 are not my favourite.)

Great. Windows 8.1 is not bad after installation. I came back to Windows drivers later, since Windows is my secondary OS, for the purpose of… gaming.

Arch Linux

Installing Arch Linux needs some skills, and Internet connection is very important. So, I installed all the packages based on the old laptop, just following the powerful Arch Linux Wiki.

NVIDIA

NVIDIA GeForce 930M is very troublesome. After installing Arch Linux, to fully utilise my graphic card, I decided to use NVIDIA driver instead of Nouveau.

However, nvidia-xconfig generated xorg.conf file does not work. I failed to run the X11 window as in the SystemRescueCD.

As a result, I removed the NVIDIA related section in the xorg.conf according to the Arch Linux forum here. And the pre-installed Ubuntu does not have the xorg.conf as well. After removing the file, X11 window works fine.

After running the Arch Linux and configuring my preferences, I found that some of the screensavers (from xscreensaver) showed the error message,

Xlib: extension "GLX" missing on display ":0"

So, I knew that there is something wrong with my Xorg configuration and the NVIDIA.

Keep doing the trial and error, then I discovered something called bumblebee. Actually I am still very confused with this bumblebee, only know that it is related to NVIDA Optimus. And, I also don’t know what the hell is NVIDIA Optimus, only know that it is something wonderful.

After installing bumblebee, then the nvidia-libgl package is replaced by mesa-libgl. And the xscreensaver did not show the error message above anymore.

Since installed bumblebee, I supposed I can use Optimus with optirun command. Running

optirun glxgears -info

I got the new error,

libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
...

Then, I thought may be my NVIDIA is too new, so I tried to install nvidia-beta. But it did not solve the problem as well.

As a result, I tried nvidia-dkms. Yeah! It works. “optirun” works fine now.

Windows 8.1

I love Dell, because the drivers are available online. I just download all the important drivers, graphic card, sound card, WiFi drivers, etc. Then I booted into Windows 8.1, and installed all the drivers. I just wonder, Arch Linux can use the WiFi device immediately during the installation, but Windows cannot? That means, if I have Windows and WiFi only, but does not have the driver, then how can I download the drivers?

After installed all the drivers, then I booted into Arch Linux, but failed. Because I failed to mount the Windows partition in Linux after installing the drivers. Then I found that, it is because of the Fast Startup feature in Windows 8. (Solution is here, look for the Fast Startup.) Because Fast Startup causes the partition “not clean”, so that Linux cannot mount it.

After disabling the Fast Startup, then everything works fine now.

Data transfer

Transferring vast amount of data between computers is very time consuming. I previously used an external hard disk. But transferring data from a 500G laptop to a 1T laptop, using an external hard disk is not applicable, since I don’t have extra empty hard disk.

At the end, I used the ethernet cable to transfer the data. (This is what I learnt from my student previously.) In Linux, I used the Network Manager to share the wired connection. Then directly connect two laptops with a single ethernet cable, and router is not required. Ethernet cable is faster than WiFi, and I can transfer whatever data I want from A to B or vice versa.

But still, I have to use the SSH to mount the target laptop.

This is a time consuming process.

Hibernation and resume issue

Now the only problem is resume from hibernation in Arch Linux. The resuming from hibernation works inconsistently. I have tried to install Linux LTS version, but it is worse because I cannot use Fn key after booting in Linux LTS.

I am still figuring out how to solve this problem.

Review of movie Project Almanac (2015)


I like science fiction movie, especially related to time travelling. Watched Project Almanac (2015), and there are quite a lot of interesting points.

[WARNING! CONTAINS SPOILERS]

Firstly, unlike Back to the Future (1985), time travellers going back will not meet the time travellers selves, this can be seen when the protagonist and the friends solve Quinn’s chemistry problem. Secondly, unlike Time Traveler’s Wife (2009), travelling to the past can change the future; yet in Time Traveler’s Wife the timeline is fixed, there is only one, single, timeline.

So, Project Almanac has a different time travelling concept. Let me list down the features:

  1. When the time travellers going to the past, they will change the future/present. And they can meet past self, which was not happened in the past of the time travellers. (like Back to the Future)
  2. When the time travellers going to the past again, they will not meet the time travellers selves. (unlike Back to the Future)
  3. But, if a time traveller goes to the past “again”, he will see other time travellers, but not meeting the time traveller self. (As in the case of David tries to change the conversation with Jessie.)
  4. After the time travellers make the changes at the past, when they are going back to the present, they have no memory for what is happened for the time from the back to present, yet there is “another self” doing something in between the past and present. And when they are coming back to the present, they are replacing this “another self”. (This can be seen after David makes the changes for the conversation with Jessie, and going back to his present.)

Interestingly, at the end of the movie, there are two identical cameras. This makes me immediately asked the first question, why? Because I never thought that David and the friends are using his father’s camera to record all the events. Therefore, the movie using the footage method is different from Cloverfield (2008), which is only one camera view. But, the footage at the end which shows that David and Christina found the two cameras must not be the same footage for all the time travelling events.

Okay. Now let me explain the movie in my own way so that it makes more sense, because there are somethings which do not really make sense. Firstly, let me name the David in the movie at the beginning until disappearing as David2. David2 discovered that himself appears in his 7-year-old birthday party. Let me name this “himself” as the David1. It is impossible that David1 and David2 are identical, just like the case past Quinn seeing present Quinn. David1 brings the key chain and wears the same cloth as David2 at going to the past at the end. And let me name David2’s past David at the end as David3. Hence, there are three Davids.

So, David1 go to David2’s time, to “fix something”. But it is impossible that David1 did the same thing as David2, else David2 will find the two cameras as David3. That means, David1 “fix[ed] something”, but different from David2, that is why no camera left. Consequently, David2 can find the time machine. Then, because of the time machine, David2 supposes have gone through everything similar to David1, that is why they dressed same and brought the key chain. But at the end, David2 destroyed the time machine, and left the camera to David3.

David3 at the end has a conversation with Jessie and he knows what Jessie wants to say. The only reason is that David3 already watched the video in the camera passed by David2.

So, this is an open ending. Whether David3 is going to do the same time travelling as David2 and left the camera to David4? I believe David3 will have a very different experience from David2 and David1, because he has the video that shows failure from David2. David2 failed because David1 doesn’t really “fix something”, unless David1 is purposely fixing the problem in order to produce David2. Then this will be more interesting.

Hence, the possible sequence is {1, 2, 3, …} or {1, 2, 1, 2, …}. Just enjoy the movie with your own imagination.

Desktop Environment and Window Manager


As using Arch Linux, the advantage is I can choose any Desktop Environment or any Window Manager. Recently, I have tried several Desktop Environments and Window Managers which are officially supported in Arch Linux. After trying, I learnt the differences and similarities among these Desktop Environments and Window Managers.

Desktop Environment

My primary Desktop Environment is Xfce4. Previously was GNOME 2. Since the release of GNOME 3, I chose Xfce4 as it is more conventional and there a lot of useful goodies (plugins). It is also lighter than GNOME.

LXDE is similar to Xfce4 in the sense of lightness, and it is even lighter. It uses OpenBox (a window manager). The drawback of LXDE is it has less plugins and lack of GUI configuration tool for modifying shortcut key. However, this can be solved by installing obkey.

In my opinion, GNOME3 is just an eye candy. It is nice to demonstrate the visual effects to the users. Because of the window and workspace are quite different, old conventional user like me feels uneasy to use it. Furthermore, there is no way to move the GNOME Dash (left panel). Yet, there are some ways to modify it. Extra configuration of GNOME requires GNOME Tweak Tool.

MATE and Cinnamon are just similar to GNOME2. LXQt is just similar to LXDE.

I tried KDE4 instead of KDE5. In Arch Linux, they are conflicting each other. Thus, I chose the older and smaller version. KDE is quite different from MATE, Cinnamon, and GNOME3. Because KDE uses Qt; latter uses GTK+. As a result, the designs are different. One of the most prominent characteristics I found is the file browser. Nautilus (GNOME), Nemo (Cinnamon), Caja (MATE), Thunar (Xfce4), PCManFM (LXDE), and PCManFM-Qt (LXQt) shares the bookmarks, yet Dolphin does not share with them. (But PCManFM-Qt uses Qt also.)

Enlightenment is another DE. It is quite different from others. It does not use Qt or GTK+, but uses EFL (Enlightenment Foundation Libraries). It has good visual effects. However, a critical problem I faced is the system tray. The system tray uses systray module in Enlightenment. However, the systray does not work properly and seems very buggy. Even worse, the systray is not going to be maintained by the developers. Therefore, alternative such as trayer can be used.

Window Manager

There are a lot of Window Managers as well. There are three categories: stacking, tiling, and dynamic. Stacking window manager is just like Windows, Mac OS X, or any other common Linux distro. The window can cover or on top of another window. Tiling window manager is not common. The windows are all in the same level, that means they are arranged as tile. Dynamic window manager allows user to switch between tiling or stacking or mixed. All the DEs mentioned above are consider stacking. Though we can arrange our windows as tiling in stacking window manager, the design of the window manager itself is still based on stacking.

I tried several window managers. There are some I do not like, especially tiling window managers, because they are almost similar. I tried Window Maker and IceWM, they are impressive, but not my favour.

As LXDE uses OpenBox, we can login with OpenBox without LXDE as a pure window manager. It is interesting to learn that a window manager does not necessary provide any panel (taskbar). The advantage of OpenBox is that you can choose your own panels, such as tint2 or Cairo-Dock. You can just use whatever you like, even Xfce4 panel or LXDE panel.

I tried fluxbox awhile only. It is also a stacking window. But it provides a panel. As a result, we need not to choose our own panel. A very simple ready to use window manager. OpenBox requires customization before truly using it.

The last one I would like to mention is i3. It is a dynamic window manager. A Linux lover should try it. It requires a little time to learn the tiling concept and the hotkeys. Once you know how does it work, you will like it. i3 can be switched to tab mode or tile mode. Furthermore, the windows can be changed to floating windows. Floating window is similar to stacking window, but it is always on top of the tiling window. So, the software such as Pidgin can be set to floating window. Besides that, Pidgin can hide to tray. Sorry, i3 does not have any minimize or maximize. Hide to tray icon is the only solution.

If using i3, you can switch between the window using keyboard, but not using conventional Alt+Tab. You can arrange the order of the windows using keyboard. You can also resize the tile using keyboard. One serious problem I faced is drag and drop between the window. But I believe that this problem can be solved by changing my behaviour of using the window manager. (Strongly influenced by stacking window manager.)

Components

After trying these DEs and WMs, whatever I choose, I will prefer several features. Firstly, hotkeys are important. It should allow me to customize the hotkeys. Panel is important to show the running applications, and system tray is very important to avoid using too much space for the running applications. Showing date, battery status, network connection, and volume control is very important. These show and control the computer status. Workspace (or virtual desktop or pager) is very important. Launcher is important, such as gmrun or GNOME Do. Using a launcher, we can run any application by typing the command. It is different from running a program from terminal emulator. When running a program from terminal emulator, the program is a child process of the terminal emulator. Exiting terminal emulator will also terminate the child processes.

Less important components are application menu, startup applications, terminal emulator, file browser, task manager, screensaver or screen lock, notification, and screenshot. Similar to launcher, we can launch the application from the menu. Sometimes I just cannot remember an application name, searching from the menu does help. Startup applications can always be configured, either using DE’s configuration tool, or using .xprofile. There are a lot of terminal emulators. Just install one and bind it with a hotkey, it will be very useful to open a terminal emulator anytime. Similarly, file browser is useful to manage the files: drag and drop, copy-paste, delete, open, rename, etc. Task manager, just like “ps aux” and “top”, allows us to see the CPU usage and kill any process. Screensaver or screen lock allows to protect the current screen from others to view, especially when we are away. A popup notification helps a lot to notify the users for a certain matter, e.g. low battery, reminder, email, etc. Screenshot is just useful for some sharing or project.

In my opinion, with the components and features stated above, any DE or WM will be satisfying.

Linux VS Windows


Recently my friend mentioned to me that, Windows is good enough for him, as long as he can complete his works. Then I argued with him, saying Linux is better. Then he asked me, in what sense. I suddenly don’t have any concrete answer.

As Linux user for several years, I already forgot why am I using Linux instead of Windows. I only remember that Linux is more developer oriented than Windows. There should have some other reasons that convince me to remain Linux user and some reasons make me keen of it. Thus, I have to compare two OSes so that I can give concrete answers next time.

Linux is free and open source. No need to pay for an OS, no need to p2p download and install a pirated version of OS. It is open source, if you are a geek, you may like to learn the source code of Linux.

Linux follows UNIX file system structure. This is a great characteristic I like. The file system structure with a root /, it is also the same thing I know about URL and internet. For Windows, it is still C: drive. And even my students today, they don’t know why it is C:, yet not A: or B:.

A little comparison for Linux and FreeBSD. Though both are UNIX-like OSes, yet I prefer Linux than FreeBSD. Firstly, Linux is more prevailing, such as various distros, various software target on Linux, and the market of Android. Secondly, Linux can be booted in logical partition, it can also be booted in FAT32 pendrive. Thirdly, Linux has a large community. Yet, Windows is just a Windows with Windows users.

Linux has strong shell, bash. Windows has PowerShell, yet I don’t know how powerful it is because I never use it before. Using bash and other commands I can grep, sed, gawk, and find to manipulate text files or binary files. Write the shell script using procedural paradigm with if-else and looping. Running Cygwin or MinGW/MSYS allows to use bash in Windows. Yet as a long term solution, it seems very weird.

Security is better, as Linux usually claims. Windows, due to the large market, hackers always target on it. One thing I don’t like on Windows is hiding the file extension by default. This makes users less aware about the file type. They can hardly differentiate a true image file or true video file from an executable file with image or video icon. They just execute the files without any awareness. In my opinion, Linux users are more computer proficient. This is one of the reasons that contributes to the security of the OS.

I agree that Windows software are more user friendly than Linux. This is because it is commercial software. That is because user friendliness is a factor to attract the users. However, the desktop environments such as KDE and Gnome are also user friendly to perform common tasks, for instance drag and drop. In my opinion, whatever Windows can do, it can also be done in Linux.

I agree there are some limitations in Linux: hardware compatibility and games. Hardware compatibility problem I always faced is the printer problem. However, this can be solved using VirtualBox, print through USB or network. There are games now available on Linux through Steam. However they are not my favourite. Playing games through VirtualBox or VMware does not solve the 3D problems in games. There is no other solution except using dual boot to play the games in Windows.

For true and stable working environment, I prefer Linux, and I will keep promote Linux to the students. Windows, for me, is just a good game console.

Choosing Linux distros


Linux is something wonderful, which until today I am still learning. Not only the command-line, but also filesystem, distributions, philosophies, open source, packaging, Linux kernel, desktop environment, etc…

It is very interesting to know why there are so many Linux distros. As I was a newbie in Linux, I was thinking on how to choose the distros and what are the differences of these distros. Some users state that Linux is the kernel, not a Linux distribution. And even some users say that whatever Linux distribution, it can be customised until identical to the other distribution (interface only).

There are a lot of reviews and comparisons on the Linux distros on the internet, I will not go through those things.

Philosophy

Firstly to choose Linux, besides we need to try the distro itself, we also need to know the distro’s philosophy, or the purpose of the Linux distro project started. There are so many distros, the main reason is the project leaders have different ideas. That is why they start the project to build their ideal OS using Linux kernel. Some distros adopt open source software and format only, as a result no proprietary software is supported. Then the users may need to get the software through other repository or download the binary files and install. The most prominent issue is the multimedia codecs. For example, OpenSUSE and Ubuntu CDs do not contain the restricted multimedia formats. However, the users can still install these codecs after OS installation. Some of the distros are more lenient with the license, such as Linux Mint or even Arch Linux.

Packaging (distribution)

The philosophy decides how the Linux and the other packages are distributed. Some distros target for the server, some for desktop computer, some for live media only (USB flash drive), some for old computer, some for gaming. Because of the target audience, the developers will package the related software to distribute to the users.

Based on the philosophy, some of the distros will distribute latest packages, or cutting edge packages (such as beta version), or old and stable packages. For example, Debian is well-known for the stable packages; Fedora is well-known for the cutting edge packages.

Package manager

In order to distribute the packages, a package manager is a must. That is why, there are Debian-based, RPM-based, pacman-based, or others. The purpose of the package manager is to manage the packages. It can get the packages from the repository. We can use it to install and uninstall the packages.

Each Linux distro should only use one package manager. It is possible to install several package managers in an OS. It is even possible to run the other package manger and install the package to the OS. For example, let say I am using Arch Linux, I get the source for aptitude (Debian’s package manager) and compile it. Then I can install the packages from Debian’s repository. However, the effect is not good. This is because the packages are built for target distro (for instance, Debian). Even the binary executable file may be compatible, the filesystem hierarchy may be different. In practical, using multiple package managers normally do not work, this is because the package manager will check for the dependencies. Therefore, do not think that you can have an OS which you can just get any packages from any repository.

(But please remember that, you can always build your own package from the scratch. However, some of the application really depending on the distros.)

Patch

Linux is an open source kernel. As a result, some developers may patch the Linux kernel in order to do something special. For example, linux-ice from Arch Linux AUR, it is a patched kernel to support TuxOnIce (suspend and hibernation features). So, no need to surprise why some distros can work like this, some distros cannot work like this.

Similar to the Linux kernel, the kernel modules (normally drivers) can also be patched for special purpose.

Community

Though the community is not part of the Linux distro, it has some influences on the distro. When we have the problems dealing with the distro, we can get some help from the forum. Each distro has different community. We should not ask the questions about other distros in an unrelated forum. Nobody can help. And no one likes to help. Because you are in a wrong channel.

Documentation

Similarly, documentation is not part of the Linux distro, but it is part of the project. Well documented information is very important for the self-learning users.

 

Therefore, to choose the Linux distro, we need to know the philosophy of the distro. Find a distro which fits to our appetite. If there is any problem, read the documentation and ask the correct community. Always bear in mind that, bugs are always there. Even we are using Windows, there are also bugs. The only problem is the severity of the bugs and how long will the bugs be fixed. Use the channel such is IRC, forum, bugs report, or mailing list to help us to utilise the OS better.

And always bear in mind, we can change to another Linux distro any time when we want.