J-F Bilodeau's Blog @ chronogears.com

Thursday, June 26, 2008

How Microsoft Won and is Loosing



Steve Ballmer had it right. Developer developer developer!

The prime reason why Windows won over OS/2, the MacIntosh and even MS-DOS was thanks to the mighty influx of application that crept up for the OS. And the only way that those applications existed was thanks to developers.

Thought the Windows API are not the most graceful API I've encountered, they were reasonably well documented. I learned the Win16 and Win32 APIs mostly by reading the MSDN help files.

Using the simple tactic of ensuring that developers would favour the Windows platform early on, Microsoft achieved dominance in the operating system market.



But what is happening today? Balmer has been singing a different tune for the past few year. Since the rocketing rise of Microsoft's stocks capped in 2000, the behemoth is now struggling to pierce new markets while retaining their heavy monopoly.

It's interesting to see Microsoft running like a chicken with it's head cut off. Vista is a disaster, they are still loosing money in their search and gaming division and .NET is barely making a dent in the Java marketplace. Let's not even mention their iPod killer: the Zune.

If it wasn't for the near monopoly on Windows and Office, Microsoft would be hemoraging money faster than the speed of sound. BANG! Bankrupcy before they know it.

I think the reason is pretty clear. Microsoft is now spitting in the face of the very people that brought them to where they are: the developers.

Balmer himself said that he would like open source innovations to happen on Windows. However, he seems (or chooses) to be clueless about the free software philosophy.



Balmer can push all he wants, but he should realize that developers are usually intelligent folks. Many open source developers are quite brilliant. I do believe that most developers can smell bullcaca when it is spewed out of someone's mouth.

Genuine honesty free of marketspeak is not something you often hear from Microsoft!



It's certainly not by forcing proprietary software or standards down the FOSS developer's throat that Microsoft is going to win any friends. Neither is it going to give developers the desire or even the posibility to innovate.

Personally, I like computers to work for me and not the other way around. That's one of the many reasons I don't use Windows &mdash I cannot stand an OS that thinks it can tell me how I should work.

Labels: , , , , ,

Friday, April 25, 2008

Control Panel for the Eee PC

This week, I wrote a small Eee PC control panel that takes advantage of the wonderful eee kernel module. The control panel runs in the background and is available through the system tray. Pointing on the icon gives the general status of your Eee PC. A click on the icon will bring up the actual panel. From there, you can control the fan, the front-side bus (overclocking) and the voltage (from what I can understand).

Obligatory screenshots:
The system tray icon & tooltip
Eee PC Control Panel Tooltip
The control panel
Eee PC Control Panel

The control panel is written in Gtk+, and works great on my eeeXubuntu. I would assume that it works fine on the default Xandros install or even (K)ubuntu. From start to end, the control panel was created on the Eee PC, proving that it can be used to get actual work done.

For the convenience of Debian or Ubuntu users, I've create a deb package. Otherwise, a tarball is available with a pre-compiled version of the control panel as well as the full source code. Of course, it's all GPL ;) Please copyleft.

eeectl.deb
eeectl.tar.bz2

Before you install the control panel, make sure you install the eee kernel module available at http://code.google.com/p/eeepc-linux/. Detailed installation instructions are available at http://wiki.eeeuser.com/howto:overclockfsb.

This is a first for me in many ways, so please forgive any stupidity or ignorance on my part. I've used Gtk, Glade and GkSu APIs for the first time, and I've created my first .deb package. I'm more than willing to learn from any guru who may find improvements to my little application.

Of course, usage of the Eee PC Control Panel is entirely at your own risk. Though I use it on my own machine, I cannot be held responsible if you fry or brick your little machine.

Hope you enjoy!

(Before you ask, there is no Windows version, nor do I intend on creating a Windows version. For starters, I'm not willing to buy a Windows license for my Eee PC. Someone else can take care of that)

Labels: , , , , , , , , , , , , ,

Tuesday, April 15, 2008

Hold the Mono, please

Does Microsoft innovate? I think so, but not as much as people think. They are very good at taking existing ideas, and adapting them to work only on their products.

This leads me to the .NET Framework, their competitor to the Java programming language. Java is a programming language that has been around since 1995 and has enjoyed tremendous success in the computing world. Its success is due to a number of factor. Personally, I feel that Java succeeded because it used and encouraged a number of best practices, like forced exception checking, strongly typed language and taking full advantage of object orientation as well as design patterns. Furthermore, Java evolved through the Java Community Process. The JCP is a process managed by Sun Microsystem, the creator of the Java programming language, that allowed interested parties to participate in the development of the language. This means that Java is not the brainchild of solely Sun Microsoft, but also that of IBM, Borland, Novell, and many other organizations. Because many organizations actively participated in the development of the project, this encouraged adoption.

Today, the success of Java is undeniable. There is one company, however, who is directly threatened by Java, and that is Microsoft. One of the early promise of Java was write-once-run-anywhere. That is, you write your computer code once, compile it, and then you can run it on Windows, Mac OS X, Linux, your cellular phone or whatever else you'd like! This is a reality today. I do a lot of Java development, and use a lot of Java programs on Linux, the Mac and Windows.

It works. Microsoft does not like this. They would prefer that applications are written for Windows and stay on Windows.

To achieve that end: enter the .NET Framework. Microsoft created .NET as a response to Java. To compete, they create a language that superficially resembles Java called C#, and a framework that is tooted as write-once-run-anywhere. They even went a step further and got part of the .NET framework standardize with the ECMA.

Just like Java, the success of .NET is undeniable. Let me be the first to say that Microsoft actually came out with some cool ideas. I like LINQ and I think that Workflow Foundation will be an important set of API in the future.

However, I will not develop open-source application with .NET for two reasons:

1. It is not free software. Java has recently been freed by Sun Microsystems. Yay! I hope that this will continue to speed the adoption of Java on Linux. However, .NET is not free. Microsoft owns a number of patents on .NET and has yet to provide a license to their intellectual property that is compatible with the GPL. Until Microsoft opens .NET, I will not touch it with a ten foot pole on Linux.

2. It is not write-once-run-anywhere. It's true that I can create a .NET application on Windows and run it on Linux. However, please repeat after me: .NET is not write once run anywhere. Saying that .NET works on Linux is bullcaca.

For starters, there is a project that is sponsored by Novell (and indirectly, by Microsoft) called Mono which permits the development of .NET applications on Linux. However, repeat after me: .NET is not write-once-run-anywhere. I need to get that into your head. Sure, it looks like it's portable, but here are the problems you will encounter:
  • The API to write GUI (windowed) application is meant to run on Windows. Whatever application is created on Windows with .NET will look good on Windows, but look like crap on Linux. Futhermore, Mono has its own GUI API that is incompatible with the one provided by Microsoft. This means you either create your .NET application to run on Windows or Linux. Say bye-bye to portability. Score 1 for Microsoft!
  • Microsoft is introducing more and more Windows specific API. Just the names of the APIs should give you a clue: Windows Presentation Foundation. Windows Communication Foundation. In other words, Microsoft is making sure that your write-one-run-anywhere investment is glued to the Windows platform.
  • The is no community process. This means that Microsoft has sole control over the direction of .NET. Don't go whining to Microsoft that your gorgeous .NET application looks like crap on Linux and does not work on your Mac. They don't care. Actually, that's a lie. They do care. They care that it runs on Windows and only on Windows. You can expect more and more Microsoft Windows specific API on .NET masquerading as 'open,' 'portable' APIs.
  • You are creating .exe and .dll files. Unlike .class or .jar files in Java, These files are Windows specific. They contain MS-DOS and Windows code. In a Java application, there is not a single line of platform-specific code. That means that Mono has to be able to load a Windows executable on Linux. For something that is supposibly portable, it sure carries a lot of Windows with it.
  • But Linux already has strong support for .NET with Mono! you say? So, why not use Mono? The reason is simple. It's a Microsoft technology. It belongs to Microsoft, and should they decide your Mono application is eating away at Windows market shares, prepare to receive a kind letter from Microsoft politely indicating that since you are using their intellectual property, you owe them $$$.
  • Though I doubt that Microsoft will ever collect open source developer for the use of their so-called intellectual property, I think that the real problem will be that Mono on Linux will forever play catch-up with .NET on Windows. Who wants to use a 'write-one-run-anywhere' technology that is one or two years behind on some important platforms? Either you write a Windows-only application in .NET, or look at alternatives.

.NET exists solely to further Microsoft's agenda. Anyone that chooses to use Mono on Linux is kindly helping Microsoft achieve that agenda. Yes, there are some cool ideas in the .NET framework, but most of those ideas are copied from existing languages. For example, I've been using workflow management API and designers long before Microsoft came out with the Workflow Foundation API.

Before you consider Mono, please take a look at what's available on Linux already. You want true write-once-run-anywhere? Java is one solution. Not good enough? What about Python? Pascal? PHP, C/C++? Need I go on?

Linux is where it is today not because of heavy-handed sales tactics or razzle-dazzle marketing, but by its own merit. Let's continue to develop Linux through it's own merit.

We will not innovate if we follow the Microsoft path — that is, mostly copying what others are doing.

As for me, I think my plate is delicious as it is. I'll hold on that Mono sauce, thank you very much!

Labels: , , , , , , , , , ,

Saturday, March 22, 2008

What is Linux?

Talking to Microsoft Windows users I find the conversation usually goes the following way:
  1. They spout out what little they know about Linux from a Microsoft perspective, trying to sound like they actually know what this Linux thing is.
  2. There is a silence in the conversation.
  3. I'm asked the question: 'Is Linux really that different from Windows?'

It's a simple question, but I find it a tough one to answer. What makes it difficult is the fact that most users equate GUI (Graphical User Interface) with the OS (operating system).
Before moving along, let's make sure that we understand the difference between a GUI and an OS. For starters, Windows is an operating system that includes a GUI. Mac OS X is an operating system that includes a GUI. Linux is an operating system that may or may not include a GUI.

So, what's an OS?
The simplest way to think of an operating system is in terms of hardware vs. software. The hardware consists of the parts of your computer that you can touch. Software is the logical, invisible part that makes your hardware do things. Software is simply a series of instructions that your computer follows. The software is typically packaged up in 'programs,' like OpenOffice, Microsoft Office, Firefox, etc...

Computers are really dumb and don't think. They blindly follow whatever instructions they are given.
This said, the operating system is a program that exists to control access to hardware and software resources like your memory (RAM), hard-drives, network, display, keyboard, mouse and so on.
Thus, a program like OpenOffice needs to ask the OS which keys were pressed on the keyboard. OpenOffice also needs to ask the operation system to draw letters on the screen. Behind the scenes, OpenOffice also needs to ask the operating system to allocate memory, load and save information to the hard disk, and send printing instructions to your printer.
The application communicates to the operating system using services or APIs (Application Programming Interface).

In turn, the operating system will rely on a 'kernel' to translate the service request to commands that the specific hardware of your machine can understand.
The following diagram displays the relationships between some applications and the operating system.
Operating System Layers
Let's go back to the original question: What is Linux?
The answer is: Linux is a kernel. No more. No less. It is the fundamental piece of code that controls the resources on your machine. Windows has a kernel. Mac OS X has a kernel. Pretty much every operating system has a kernel.
However, a kernel provides API that computer programmers use to write programs. End users do not interact directly with the kernel. To allow users to interact with their computer, a set of tools are provided with the operating system. In the world of Windows, you are familiar with the Start menu, the Control Panel and the Windows Explorer. These are some of the operating system's tools that one uses everyday to control the machine. These program are part of the operating system, but run on top of the operating system APIs. Such tools are sometimes called shell programs.

Linux is only a kernel. It does not include a shell or programs. However, Linux is most commonly packaged with a combination of free programs from another--as of yet incomplete--operating system called GNU. Because it borrows from the GNU project, you may hear people refer to the operating system as GNU/Linux.
With the combination of the GNU tools and the Linux kernel, we now have a complete operating system.
Well, it's complete in terms of functionality, but the average, everyday user would not consider it complete due to the fact that you do not have a GUI at this point. In other word, there are no graphics, icons, mouse, etc. Just 'cryptic' commands typed on a white on black screen.
So, the answer to the question: Is Linux like Windows seems to be no for multiple reasons.
  1. The Linux kernel has comparable functionality to the Windows kernel, but exposes the API differently. Thus, programs written for Linux do not work on Windows, and vice-versa.
  2. Windows is an operating system, while Linux is just a kernel (a part of the operating system).
  3. Linux is free software that is open to anyone to see and modify. Windows is proprietary and is closed -- no touchy the kernel!

There are more differences to discuss, but I would like to finish this post with the following point to consider. Linux is not a GUI. In other words, it is not the program that controls what you see on the screen and how you interact with your machine. It is the glue that ties together your hardware with your machine. The nitty-gritty technical details are very different from Windows.

BUT, we haven't talked GUI. In the world of Linux, there is not one GUI, not two GUIs, not three GUIs, but dozens of GUIs available. Linux has been used anywhere from digital video recorders to supercomputers to your average, every day desktop machine (like mine ;)).
In future installments, I would like to discuss how Linux can look and behave in a fashion that is familiar to Windows users. However, I will continue to emphasize that Linux is not like Windows...and why that's a good thing!

Labels: , , , , ,