Why Open Source is fundamentally flawed…

I’m a huge supporter of the open source movement. It’s the best thing to come along since sliced bread. Many of the tools that I rely on to do my day to day work would not exist if it wasn’t for the struggles of the open source movement. This doesn’t change the fact that I feel the open source movement is flawed in more than one way; its battle is made more difficult by its very nature.

Enforcing the GPL

Regardless of the good intentions of the GPL there is really no way of forcing companies to abide by it. For example, Company A decides that they want to write a application, they first take a look at sourceforge.net and search for all the various applications that are available in the given category. Company A being lazy decides that its easier to extend Sourceforge Application B than write their own from scratch.

You may well say that even if Company A does this it will be apparent to anyone with ‘know how’ of decompiling/disassembling. This may well be true, but there are ways and means of getting around these particular problems as well. The same technologies that are used to protect compiled code against reverse engineers can be used to throw open source watchdogs off the trail.

Company A has just benefited from someone else’s work, and proceeds to make a handsome profit selling their new product. The open source movement can rant and rave and even try and out market (unlikely without a budget), but at the end of the day they have no proof.

Handing out the source code, regardless of what license it is under is the equivalent of giving away the keys to the kingdom. Licenses have proven time and again that they don’t work, and the p2p piracy that is so deeply dug into the internet now is the perfect example of license failure. Even more so the source code for an application, while it is possible to protect a compiled application using anti piracy technology, no such method can be employed to protect the source code of an application.

Development Model

The open source development model has its benefits; one of the biggest arguments that Open Source Movement will throw at you is the fact that allowing open contribution enables projects to evolve at a much quicker rate. What I see is a lot of half finished projects, frustratingly close to complete and treading water for lack of developers. The major projects that are going forward are being driven both by larger organizations, and even companies that have an interest in utilizing said open source project for their own purposes. This is compounded by the fact that rather than getting together with a previous project developer to create a truly powerful tool, quite often a developer will start their own project from scratch and duplicate work that has previously been done.

To be fair the Open Source Movement has had some tremendous successes, that doesn’t change the fact that it’s flawed, it just means that some of the better developers are able to wade through the weaknesses and produce some world classes tools regardless.

The Misunderstanding of Open Source

Plenty of people flock to the open source movement under the mistaken impression that its free. Hell my first steps into the land of open source were made under this deep-seated misinterpretation, everybody is looking for something for nothing

Recently I’ve been doing quite a bit of development in Java. Of the many languages that I’ve played with and used I find Java to be one of the most functional programming languages out there. There are plenty of factors that have helped me choose Java as my primary programming language, and while I’m not under the illusion that java is the ‘monkey wrench’ of the programming world, its still an invaluable tool.

I’ve been around programming languages for the last 6 – 7 years, in that time a lot has changed. The software industry has matured in its approach to programming, and the fundamental building blocks that make up the software industry have matured as well. Gone is the time when you needed a PhD to understand the complexities of computer programming. This is not an article about the many different languages; this is not even an article about how Java is better than ‘x’ language. This is simply an article about the features of Java that slipped it into my toolkit.

Native Graphics Support

The first thing that usually pops into mind when you want to convince someone about the superiority of java, is the fact that it’s a compile once run anywhere language. Honestly though I find this less useful than you might think. What I do find useful is the fact that with very little research you can write a graphical user interface for an application. I find the graphics support for Java to be logical, where so many other graphics libraries are not. While I’m not overly fond of the layout managers that Java provides, I can appreciate the fact that they’re there if I do ever find a use for them.

Excellent Database Support

This was one of my primary reasons for moving to java in the first place. If you’ve ever tried to get MySQL working with (Visual) C# then you’ll know what I’m talking about. The JDBC makes connecting to whatever database a dream, if your program is well written you can even switch database backend without to much trouble.

Eclipse IDE

If you haven’t tried Eclipse then you don’t know what your missing out on. While its certainly not solely dedicated to Java it’s a very flexible and well designed tool that will help you get your work done. In addition to being a useful portal to the Java language, it is also a driving force in making Java into more than just the pet project of Sun Microsystems. Take a look at SWT, which was originally developed by IBM and is distributed as a part of eclipse and you will begin to understand.

Lack of Deployment Options

This is one of the fundamental failings of a lot of programming languages. Running a java program relies on the operating system already having a copy of the Java Runtime Environment (JRE) installed. If its not then you won’t be able to do squat, additionally there is no way of knowing whether the version of Java that you’re programming in, and that has the features you want is installed on the client.

You fall back into the same rut that the old VB programs had with missing DLL files. There is no simple way of installing both Java and the given Application in one easy step. Additionally you are held hostage by the fact that you require certain environment variables to be set correctly for the java program to run (JAVA_HOME, CLASSPATH). This is all well and good but it’s just more overhead for the programmer to worry about when they need to do a large scale deployment of an application that they’ve developed.

GCJ bridging the gap

One of the baseline flaws with Java is the fact that it is interpreted (from bytecode) at runtime, and as such relies on the JVM. More importantly it means that it runs slower on CPU intensive processes like md5 hashing for example. GCJ is the GNU Toolkit’s answer to the fact that Java is not open source. It is in effect a complete replacement for Sun Java. More importantly it provides support for compiling Java directly as an Executable freeing it from the reliance on the JVM.

The speeds generated when running is GREATLY improved, to close GCC/G++ levels, and more importantly the deployment is less of an issue. You do lose the fundamental portability that is gained with Java classes, but there is no reason you can’t provide the class files and just install GCJ (rather than Java) to allow the class files to be converted into executables.

THE only place where GCJ is still lacking is the area of AWT/Swing; the developers are still working on adding the support necessary to support the windowing toolkits. Incidentally they are looking for help in this area if any of you programming gurus want to give up your spare time.

Conclusion

The bottom line with Java is that it is a functional and practical language. The fact that Sun is still holding the reins is regrettable because it’s inhibiting a language with otherwise HUGE potential from maturing. The compile once, run anywhere is less useful than ‘write once / compile (& run) anywhere’ this subtle difference is where Sun missed the boat. The matter of compiling different copies for different operating systems is trivial when you consider the fact that doing it the way they are cripples the speed of the language.

Other than that Java is a great choice because it’s a language that’s flexible enough to be used on plenty of different operating systems. You do lose a certain amount of control over the low level functions; however this particular beef has been adequately dealt with in the form of JNI.

And Ubuntu changes the game.

I’ve had problems with desktop Linux in the past. While I openly promote Linux in the use of servers and the like, my attempts to promote it as an alternative to Windows XP have gotten me burnt. Users who can barely grasp the fundamentals of computing are ill equipped to be thrown into the deep end.

Even I find it hard to commit to using linux as my primary operating system. The majority of my clients use Windows, and compatibility issues have killed me in the past. All this had bred in me a belief that Linux while it was a great tool for the computer geeks of the world, it was never going to cut it as an everyday tool for the masses. I could not have been more wrong.

Not long ago a friend suggested that I take a look at ‘Ubuntu’. I hadn’t missed its appearance on the now glutted Distro scene, I’d simply written it off as another wannabe. Ubuntu is forging new roads, making steps towards that holy grail of operating systemish glory; conquering the desktop. I didn’t know this, so it took a while and a lot of kicking Fedora (and Debian) before I finally downloaded the ISO.

I’ve found my laptop to be a very good tool for testing the various operating systems and distros. Even Fedora in all its hype fell short of the mark, it took me several recompiles and a couple of double back flips to get both my sound and wireless cards working.

The Installation

Having downloaded the 5.10 (Breezy Badger) ISO, and burned it to CD, I slapped in one of the spare 20GB laptop hard drives I have sitting around and booted from the CD. The Installer is the first place you will recognize the similarity to Debian, I use the word loosely because while it is clearly derived from the Debian installer, it doesn’t overload the user with options you may, or more likely, may not understand.

The installation is mostly automated, only stopping a couple of times to ask for vital details. The complexity of the install process falls very close to that of windows, and while Fedora may have a flashier interface, it also gives more options. In some respects, particularly when dealing with inexperienced users overwhelming options can be a bad thing.

So far so good; the installation flies along at a nice pace and I’m left looking at a VERY brown login screen.

First Impressions

Entering the username and password that I setup during the installation process presents me with a fairly standard Gnome interface. Perhaps my only beef with the distro is this standard interface. I’ll make no secret that I don’t like my menus up the top. I used a Mac for years when I was younger, and if there is one thing I like about Windows its the menu at the bottom.

This is supposed to be be geared at newer users, people that have used Windows will expect the Menus and the like to be in a certain location. It is easily remedied (for someone who knows what their doing), but I would have liked to see this done better.

The applications menu, once I’ve gotten over my distaste at having to move my mouse to the top left hand corner is a pleasant surprise. It is well organized and contains only a minimum of programs that form what I would consider the star performers of the open source movement. More importantly it includes a simple method of installing/uninstalling applications just in case.

Hardware

Now Linux is great on stock hardware; server hardware. But when I’ve tried putting Linux, both Fedora and Debian, on my D800 Laptop, I had severe trouble getting the sound and wireless working. If I have to recompile the kernel that’s an instant failing grade in the hardware department. I like recompiling the kernel, seeing if I can squeeze a little extra performance from my machine…my computer illiterate windows friends just look at me strangely when I say the word ‘recompiling’ and lets not even talk about ‘kernels’.

To my shock and amazement, my sheer delight. Both the sound and the wireless card (Intel 2915ABG) work by default. I can even press the volume buttons on my laptop and see the volume bar come up on the screen. VERY COOL.

I get instant support for my USB Hard Disk, although I can’t write to it (NTFS). When I do manage to track down a disk with FAT32 I can write to it as well, BY DEFAULT from a non root account. If you haven’t noticed I put a lot of stock in the ‘by default’ ability.

On the downside my internal dialup modem doesn’t work, this would not be a problem usually in the day of broadband. However having just moved I find myself reduced to dial up. Slotting in a spare PCMCIA card solves the problem.

Another annoying factor during boot is the fact that it sits trying to DHCP the interface(s) even though one or both of them are not plugged in. It slows the boot down, which is a pity, perhaps in future releases they’ll address this issue.

Conclusions

Ubuntu has two other flaws that I could pick; It doesn’t install a MP3 Compatible music client by default, and the games installed by default lack consistency and are essentially, people really do play the stupid games provided, so WHERE is my Solitaire clone.

I am thrilled with the ‘Out of Box’ experience that Ubuntu has shown. There are tools, and applications that I would probably use that have not been installed, but then again I’m not your garden variety computer user either.

While there are things that this distro could do better, partially this is taste over necessity (Brown). Overall I would give a 8/10 to Ubuntu as a Desktop Operating System. Of all the things I should thank Ubuntu for; it’s my restored faith in Linux, and its ability to become a viable desktop alternative.