Thursday, July 05, 2007

Eclipse, a Platform or an IDE?

This debate has popped up again recently as it seems to regularly at this time of year. I've added comments to the odd entry or two. So I figured I should make a statement in my own blog and to make sure I'm clear on where I stand on this issue.

Is Eclipse a platform for tools vendors, or an kick ass IDE for end users? From my vantage point being a project lead on the CDT and working for an Eclipse member company, Eclipse is clearly a platform, not an IDE. A great product manager who I used to work with asked me a great question one day early in my career on the CDT. I mistakenly used the term IDE and he asked a great question. "How can you call it an IDE if there's no compiler?" In other words, how can it be an "Integrated" Development Environment, if it doesn't come with everything you need to actually use it?

But Eclipse is a great platform for making IDEs and they are available from a number of sources, just not from Eclipse itself. And a lot of those sources are from the board and add-in provider members who help fund the Eclipse Foundation and who fund the vast majority of the contributions to Eclipse. This is a business, and I have no problem with that, and this group is focused on making sure their commercial products get the most benefit from Eclipse as a platform as they can. Because of that, though, none of them are really working on, or even, why there are road blocks to making Eclipse from Eclipse a true IDE.

So it feels like there are two issues hanging in the air. First, if we are not really distributing a true IDE from Eclipse, then I think we really need to stop calling it one. The user community expectations have been set high and we often see them disappointed by what they get from Eclipse. I believe it is really limiting the success of Eclipse. Yes it's great now, but I am sensing a slip and everyone is all of a sudden worried about NetBeans for some reason.

That leads to the second issue. Eclipse needs to be a great IDE. And I mean the one they download from Eclipse.org. This is an area where I hear Netbeans is beating Eclipse. Sun is investing in Netbeans to make it a great free IDE out of the box. They don't seem to have a commercial interest in making money at it (which makes me wonder why Sun does any of the Java stuff that they do).

But at Eclipse, that isn't the mindset of the decision makers. I get the sense that they are actually afraid of the free Eclipse competing with their products. I guess if all you are doing is packaging up the free stuff and charging for it, you have a point. But the products that I see Eclipse members building aren't that, so why the fear?

I've invested a lot of personal effort into making the CDT a great IDE. I've seen the feedback we get when the average Joe developer tries to build his own IDE with it. It's not an easy task and they often fail. But I want these people to be successful. Because some of them, one day, will have a need to use my commercial product, and if their negative experience continues to linger, I don't want that impacting their purchasing decision...

CDT for Windows, an exercise in product management

Putting the "CDT for Windows" distribution together has been a lot of fun. I've been able to learn more about Windows installers, or at least Inno Setup which really dumbs down the process so that you can quickly put together a pretty sharp looking installer. Even their Pascal scripting engine brought back a lot of memories from my first year computing class (how do you create a comment in Pascal anyway? {}.)

I've also been able to learn more about the infrastructure that SourceForge offers to let me set up bug tracking, help forum, announcements mailing list and most importantly, the downloads section for the distro. That and it gives pretty good statistics information so I can see how many downloads I'm getting (~250 so far), and how easy it is to get into the 99.78 percentile in SourceForge project activity (number 415 out of 152,347 today!)

But what SourceForge doesn't give me, and something that I've never been good at, is a nice Web site and marketing material. Last night I finally put together the CDT for Windows web page and it's pretty stark at best. In fact, I had a hell of a time just picking the background color since I just couldn't stay with the default white which was blinding me.

It really makes me appreciate the work that the product marketing guys and their teams do. I've always had a great relationship with these guys in my career since they represent the customer as we're putting together the product, and they make sure the lines of code I create, get turned into a hot looking product that customers will find appealing.

Well, with CDT for Windows, being an open source project not really sponsored commercially or by Eclipse, I'm finding myself flying without a net. As much as I like hanging out with marketing people, their talents haven't rubbed off on me yet and the marketing material for CDT for Windows looks just plain ugly. Even the icons look eerily similar to the Eclipse Platform ;)

But, I still think CDT for Windows will be useful for people who have struggled getting the CDT working on their Windows machines. Hopefully, I'll attract more artistic people to help build it's own look and feel. This is the beginning of a journey that I thought would be simple, but having to do it on my own, it ain't pretty...

Saturday, June 30, 2007

Re: Don't try this at home

As I mentioned recently, I had trouble with CDT for Windows with performance on my slower machine at home. Well, I've been able to trace it to the Harmony VM. Not only that, during testing, I was able to hang the VM when I went to do a CDT index rebuild. So for CDT for Windows 0.9, I've dropped the Harmony VM for now. The promise is there, but it's clearly still a pre-release and they have some work to do to get it fast enough and to fix some other bugs that we raised against them as well.

So after switching to the Sun JRE, things are much better, even on my Core Duo laptop. And I was able to run it successfully on my 666MHz beast of a machine, albeit, it was still pretty slow, but no worse than everything else that runs there...

Friday, June 29, 2007

Introducing - "CDT for Windows"

As I've mentioned a few times on this blog and elsewhere, we often get requests for a simpler way to get new users up and running on their Windows machines. This is especially true for students and hobbyist who have a need to learn and play with C++ and don't want to dive into Linux. As well, we get numerous bug reports from people who are trying to go through all the manual steps to set this all up and miss something.

Well, I am pleased to announce "CDT for Windows". This is a distribution of the Eclipse Platform and the CDT with the MinGW GNU tool chain for Windows and a Java Runtime wrapped up in a simple Windows installer. With a few clicks you'll be up and running debugging a C++ application.

The distribution is on SourceForge at http://cdt-windows.sourceforge.net/. It's currently at version 0.9.1 and contains the Europa Platform and CDT 4. My objective is to get it at a 1.0 level by the end of September with CDT 4.0.1. I have also included the SDL portable multi-media library. My hope is to get the wxWidgets portable application library into it as well.

As with the CDT, I really want to build a community around "CDT for Windows", mainly since I'm doing most of the work in my spare time (I've got a lot of work to do at QNX and the CDT too, you know :) and need to share the work, which really hasn't been too much so far. I've only done light testing so feel free to give it a spin, raise any issues you may find in the SourceForge tracker.

I think it looks pretty slick for something that only took me a couple of days to put together. I hope you find it useful as well.

CDT 4, Now Available!

It's been quite a year for the CDT. The growth of our community has been very rewarding. And CDT 4 is the fruit of our efforts. There are lots of new features and I counted 1152 bugs marked fixed. We have a What's New section in our user docs that doubles as our traditional Eclipse New & Noteworthy. You can see it on the Eclipse help machine.

Download instructions are available on our web site as well. There are lots of other ways to get it too. The Eclipse download site has the Eclipse Platform and the CDT in a single zip file. If you are on Linux, I'm sure you'll see it soon in your favorite distribution. If you are on Windows and want to build Windows application with GNU tools, check my other announcement ;).

Wednesday, June 27, 2007

Don't try this at home

I am putting the finishing touches on "CDT for Windows", my self-contained CDT with MinGW distribution that I'll be officially announcing later this week. To test it out, I thought I'd try it on my machines at home. One of them is this pretty old Pentium III 667 MHz (or as I like to call it in a throw back to my Iron Maiden days, 666 MHz, the processor of the beast, and I apologize if you've never heard of Iron Maiden :) with 256 MB of RAM but with a healthy 80GB hard drive. We've been having real performance problems running anything other than a web browser on it, and even then, I can't do things like TSN's flash video clips. But, heck, I thought I'd give it a try anyway.

Whatever the minimal required machine for Eclipse is, this ain't it. What a mess. It took forever to do anything. And all I did was create our Hello World project, build, and fire up the debugger. Now, I am using Apache's Harmony JRE which is still pre-release, so maybe that's not helping. But it's amazing to see what memory starvation does on big software.

One thing I've heard off and on over the years is people complaining about the sluggishess of Eclipse and the CDT, especially on older Unix machines that had multiple users sharing resources. Now I see why. Luckily, developers using Eclipse usually have plenty of horse power and memory anyway and this isn't as big an issue as it was a few years ago. But we still need to watch out. Even running the CDT on my 512MB, 1.8 GHz AMD Linux test machine at work has issues.

Saturday, June 23, 2007

CDT 4, and so it begins

For all intents and purposes, barring emergency rebuilds, CDT 4.0 is done. If there are moments in my career that I hold as highlights, this is one of them. I am proud of the work that the committers and contributors have done and of the great feedback and bug reports from our community. Funny enough, I ended up having the final severe bug to solve, and it was a toughie, but I was glad to work my butt off and to put up my share to match all the great work everyone has done this year.

I have a webinar scheduled for July 12 and I invite you all to attend. I'll be walking through all of the features of the CDT with focus on what's new. I hope you'll be as impressed with the new CDT as I am.

But for now, I need some sleep. It won't be too long before I need to get back to work bringing CDT 4 to my QNX customers and start planning for next year and CDT Ganymede (the next Jupiter moon after Europa you know, at least that's what they tell me...).

Tuesday, June 19, 2007

Fun with ANTLR v3

A colleague of mine puts it best, "I have a habit of chasing shiny objects". I'm interested in so many things in this industry that I love to tinker with that I never actually get to finish any of them, other than a C++ parser I once dreamed of :).

The latest shiny object is the new ANTLR version 3, a fancy new parser generator. I've followed ANTLR with interest for a few years and we almost used it for CDT's parser back in the 1.x days. But at the time we felt that hand coding was the only way we could successfully deal with C++ ambiguous statements (e.g. x * y, is that expression, or a declaration of a pointer to x).

The new version comes with an LL(*) parsing mechanism that uses infinite lookahead (the *) to decide what rules a sentence matches. If you aren't familiar with what all that means, Terence Parr, the author of ANTLR, has written a great book that explains it all for you. The book itself is interesting since right now there is very little documentation other than the book. But it's only $24 dollars for the "non-dead tree" PDF version and is an interesting way to help fund the work.

But, this is essentially how Johnny C and I wrote the CDT parsers. We start at the high level concepts and break them down into finer grained detail until you get to the individual characters, creating an Abstract Syntax Tree (AST) along the way. You can base interpretation choices on where you are in the analysis and by looking ahead into the source stream as much as you need. It's a very powerful technique.

With ANTLR, however, you can specify the grammar at a higher level and have it generate a lot of boilerplate code for you. It may be the one parser generator tool that can convince me that it's better than hand coding. But to figure this out, I decided to try building a parser. Mike and the CDT guys at IBM are already working on a C parser using LPG, an LR parser generator (LR is bottom up, which, while faster, doesn't allow you to easily use context information when resolving rules, I prefer LL) and extending it for UPC, Unified Parallel C. And since I need to resolve some extensibility issues for GNU versus MSVC, and having a lot of experience in the past, I decided to try a C++ parser.

Now if ANTLR can handle that, I'm sold. It'll be an interesting journey and should allow me to try out some ideas on improving how we did some of the things in CDT's parser. Also this is just a prototype and I don't really plan on replacing CDT's parser with it. But it will help me learn ANTLR more and help me help others in the Eclipse community who want to use it. And who knows, another shiny object may fly by and take me on a totally different tangent anyway...

Thursday, June 14, 2007

More word on massive multicore

I was just reading this article on Intel's work on trying to bring massive multi-core processors to market. The had showed a demo back in February that I blogged about back then. However that chip didn't really do anything other than run 80 threads at a time. It didn't have I/O or memory from what I could tell.

So now the press is trying to figure out how Intel will productize that. I think the article asks some pretty irrelevant questions, like "Will they be x86 cores? Will they run today's applications?" And the response is that they are working on it to make it easier for programmers to deal with.

But I think that's a mistake. Why would you run your favorite e-mail program on an 80 core machine? Eclipse, now that I can see, especially if you've ever debugged a run-time workbench and saw 30+ worker threads going at it. But really all we're doing there is taking the same old paradigm and stretching it beyond it's limits. The hardest bugs I've had to solve were when multiple threads were contending for the same resource and someone forgot to synchronize them. Happens time and time again.

No, 80 cores are great. Mix that with 128 stream processors like those on the latest GPUs, and there's some massive horsepower that we can take advantage of. You can hide all the complexity behind good compilers and run-times, but I don't think you'll get all the benefits of the hardware. I continue to believe that we need some new programming paradigm where we stop thinking of programs as a sequence of operations and more like a network of data flows. Turning to objects was the first step, but I think there's further we can go.

Wednesday, June 13, 2007

A new way to get your CDT

Not only am I the CDT project lead, I'm also CDT's release engineer. That means I get to write all the cool ant scripts and stuff that pumps out the CDT builds on a semi-regular basis. Actually, I'm more the release engineer team lead and cron is my underling that does almost all the work. Actually cron does such a good job I hardly ever have to do any release engineering at all unless I have to change something.

Well, the past couple of weeks I've had to change some things. The first one is to meet Europa's guideline of having our jars digitally signed for security. That way, when you download the CDT, you know you're getting the officially blessed version from Eclipse. I think the risks are pretty low, but it is possible for someone to make a set of zips that look like the CDT but aren't and do something nasty things. The infrastructure created by the Eclipse team makes it easy to do the official signing so I figured why not.

The other issue we've been running into lately is the sheer size of the CDT builds. They passed the 400 MB mark with all 9 platforms and the two main features, runtime and sdk, that we build. With only 10 GB (now 15 GB) of disk quota at eclipse.org, we kept bumping into the limit and constantly needed to clean up builds. When you take a close look, the 9 platforms are almost identical except for the small shared libraries that we have in the cdt.core fragments. The update site, as a result, is much smaller, around 40 MB, since you don't get that duplication.

So while I was wearing my release engineer hat anyway, I figured I'd fix all this. The recommended way to get the CDT is using our update site. We will have the runtime feature, the main one that you download, on the Europa update site. That feature along all of the others will also be on the CDT Europa update site. All this will be explained on the CDT's website when we release. The jar files will also be compressed using pack200 to make downloads a lot faster and save bandwidth on the Eclipse servers and mirrors.

The other big change is that we will no longer be releasing feature and platform specific zip and tar.gz files. Instead, we will have a single zip file called the CDT Master that is an Archived Update Site. So you can install normally via our update site on Eclipse.org, or you can download this zip and install it, still using the update manager, but from the zip file instead. We are currently doing our nightly builds this way, and it works well.

This will hopefully make the CDT easier to get up and running while saving a lot of space and bandwidth for Eclipse. It's good all around, but it is a change and, as always, I'd like to hear your feedback on it.

Friday, June 08, 2007

Happy 5th Anniversary CDT!

From: "John Duimovich"
Newsgroups: eclipse.tools.cdt
Subject: [ANN] - CDT project changes
Date: Fri, 7 Jun 2002 17:20:34 -0400

The Eclipse Tools PMC is pleased to announce some exciting developments to the CDT project hosted on eclipse.org. First, QNX will be contributing some C/C++ core technology from their recently announced product to eclipse.org. We believe that this will enhance the value of the technology hosted on eclipse.org and bring some industrial strength technology into the CDT project.


And so it began. Five years ago yesterday, the new CDT project was born. The QNX team had just gone through six months or so of compressed development in a remote location affectionately called the "Toolshed" (we're known as the Tools team). They had basically gone from nothing other than the source to Eclipse and JDT to come up with a fully functional C/C++ IDE. But QNX is an RTOS and run-time company. Tools enable that business but take a huge investment to do really well, and it was becoming clear that a lot of good can come if we would share the work and benefits of that work with others in the open. A handful of other vendors liked what QNX had done and worked together on starting this new direction for the CDT.

A meeting was held at QNX headquarters on July 17'th of that year in what turned out to be the first ever CDT Summit. In attendance were people from QNX, Rational, Red Hat, and MontaVista. From day one, we enjoyed the spirit of "co-opetition", co-operating competators, that still lives strong today. Here's a fuzzy picture of Sebastien Marineau from QNX on the right, the first CDT project lead, who really got this whole thing off the ground. He's sitting with John Prokopenko, a senior architect/manager from Rational and a mentor of mine.



I was at Rational at the time and this was my first exposure to the new CDT. And as we know now, it became a career changing moment for me. Who knew then that I'd spend the next five years living out a dream of mine, to make a software development tool that would help thousands of software developers write better code faster. I wouldn't have passed that up for anything.



There are many people to thank for getting us here, including Sebastien and the team here at QNX for having the vision to share their great work with the world. To my former co-workers at Rational/IBM (who coincidentally I had lunch with today) for helping get this crazy DOM thing in place. To the gang at Intel (especially Leo!), TimeSys, Chris at TI now at IBM, and everyone else who formed that initial spurt of a community outside the original two, to all the product vendors and users and contributors that now form what I estimate to be our 400,000 member CDT community.

Thank you all! And happy 5th anniversary!

CDT 4, What a difference a community makes

If you've ever been to a CDT meeting, chances are you would have heard me state one of my mantras, "Don't take a .0 version of an open source project and put it in a product". Certainly, in the past with the CDT this has been very true. And it certainly hasn't been the fault of the committers and contributors to the CDT who work on it with a passion and really want it to be the best C/C++ IDE it can be. A lot of it had to do with the lack of test pressure we'd get on these releases. And a lot had to do with the lack of feedback from the community until after the release. A lot of it had to do with a young community that was just starting to grow.

Over the last year, this has all changed. With the great bug reports we've been getting from the community and the volume of patches we've been getting from contributors, and the great work of our army of committers, I am happy to say that CDT 4.0.0, is the first .0 release of the CDT that I feel really good about. I'm sure everyone will be pleased with it from our open source community to the vendors that adopt it.

In the spirit of openness, I have to admit I have been very dissatisfied by our previous .0 releases. And I think I need to share what happened so that we can learn from it. Here are the "lowlights" of previous CDT .0 releases (BTW, the CDT 1.x.0 series actually went pretty well, so we'll start with 2):
  • CDT 2.0.0 - first introduction of our new parser-based indexer and search. This was a dramatic change to the way we did indexing and the start of our performance woes. In fact I rewrote the CDT scanner (tokenizer) in 2.0.1 since it was brutally slow. We also introduced a new build model that wasn't really ready for prime time and really needed to be exercised with more tool chains.
  • CDT 2.1.0 - This release was to meet one of the contributing vendor's product needs and was done while the other vendors were focused on the next release. It was a bit difficult to watch the extent of work they were doing mainly on their own. This really showed the need to standardize our releases (thanks Callisto, Europa, etc!) and how the model we had been following can't scale as the number of contributing, and consuming, vendors increase.
  • CDT 3.0.0 - This was the big DOM release. Again, massive changes to the indexing and search framework done by one vendor. Even worse, that vendor later had to withdraw its resources on that massive bulk of code due to business reasons. This really showed us the need to have a diverse set of committers working on each component. Contributors will come and go, and you need to build a robust community to survive it.
  • CDT 3.1.0 - Yet another new indexing framework. With the contributors to the original index gone, I took it upon myself to finally throw out our failing assumptions, 100% correctness as a requirement being the big one, and focus on a new strategy to address performance. At the end of the day, this new strategy is the right one and correctness was still pretty good. The problem was that I did it myself and bit off more than I can chew. It was an absolute necessity to get it done, though, but I did do a lot more work for 3.1.1 to make it product quality.

It's been a while ride over the last 5 years on the CDT (BTW, it was 5 years yesterday, I need to blog about that too!). I think we've learn a lot from it, probably enough to write a book about it. Being in the open, I hope others can learn from it too. At the end of it all, I think the most important aspect of any software platform project, commercial or open source, is that of community. And the most important job of a project is to build that community. And that there is probably nothing harder to do than build a community. As our industry goes through this shift, we really need more examples of what to do and what not to do. Then, hopefully, we won't have to always go through pain like this.

Monday, June 04, 2007

Some CDT Stats and Memories

In the rush to get numbers for Ian's Europa stats report, I got wind of a web site that gathers these stats for us. The CDT's numbers are here. There are a couple of items that caught my attention. First was that CDTs line of code count is only 646,651. I believe at one point we were actually more that 700,000 so we've really cleaned up a lot of dead features over the last year or so. It also shows the power of the Eclipse Platform that we can take it and offer a complete IDE for C/C++ in such little code.

The other number that caught my eye is the estimated 176 person years of effort to build all this. I'm not really sure how they got that number but looking at the breakdown by developer, it seems pretty reasonable. At a loaded labour rate of $150K US, that's about a $26M investment, which points back to the main reason I think the CDT is successful commercially. Not many companies could afford to do that on their own.

Taking a look at the contributors list, also reminded me of all the people that have worked on the CDT over the years, 32 in total. And although some have moved on, their contributions were huge and still pay a important role in the CDT today (thanks, John and Alain!). And we have new blood to take over and they are quickly catching up, especially the gang from Intel and Wind River, and the new team at IBM and Symbian are starting to role, and of course, our debug keepers from ARM, Nokia and Freescale.

On the eve of our biggest release, CDT 4.0, it was nice to sit back for a moment and think of all the great contributions we've received and the great people we've worked with over the last 5 years that play such a big part in getting us where we'll be tomorrow.

Linus on source control systems

I ran across this video on the weekend. It's Linus Torvalds giving a talk at Google headquarters about his thoughts on source control systems and why he likes the one he made the best. I thought I was overly opinionated, but wait until you see Linus. This talk was especially relevant to me as I am currently weighing the benefits and costs of moving from CVS to Subversion.

Despite his crass style, Linus does make a lot of points I have to agree with:
  • CVS sucks. SVN tries to be a better CVS, but the problems are so fundamental and SVN doesn't make enough strides to make it much better than CVS.
  • Merge is the key feature of any source control system. We've gotten used to CVS's weakness at merge and Eclipse's CVS support helps a lot. I actually think the SVN Eclipse plug-ins are a step backwards since I haven't seen a successful merge with them yet.
  • Source control systems should allow everyone write access, at least on branches. I would love it if everyone who customized the CDT could do it in our main repository so we can see what they did and make it easier to incorporate their improvements. I'm not sure that is even possible in CVS and it requires central administration at least in SVN. I guess with Linus's GIT, allowing this is it's number one advantage.

I'm actually a big fan of Rational's ClearCase because of it's ability to manage branches and merges. It was a behemoth to manage, and a lot of people found it hard to work with, but I really appreciated the ability to work in a private branch and make occasional merges back to the main line. I'll definitely want to look at GIT and see how it compares. Of course, we would need an Eclipse plug-in to work with it...

BTW, when I visited Google during EclipseCon, I saw this stage. It's in their cafeteria and you can see people getting drinks in the background. I wonder how many other cool visitors they get like this.

Thursday, May 31, 2007

Now there's a screen I can live with

I've just been reading a few notes on the web about Palm's new Foleo "Mobile Companion". If you haven't seen it yet, it's a mini-laptop type thing that's intended to work with Palm's Treo smartphone. But under the hood it's really a mini-laptop that has wi-fi and Bluetooth connectivity and a USB port and SD slot for expansion. And it runs Linux with an Opera browser. The price is also pretty reasonable at $600 US and that's with a 10" screen and full size keyboard, although there's no function keys.

So, I'm not promoting the product. Yes, I know people from Palm who are contributing to Eclipse and the CDT, which I'm sure they're using in conjunction with this product. But I think it could the be the start of a trend. Everyone loves smartphones and getting their mail in Blackberry's and such, but the size of the screen and keyboard on these devices really limits their usefulness beyond their mobility. People still need laptops to do their real work.

But I think there's room in the mobility market for devices like this one. The embedded system-on-a-chips are there now to do it. And I think you'll even see games on these things with the 3d capabilities of these chips. With solid state memory like SD cards getting bigger and cheaper, these could be really useful little machines. Palm was first and it fits their niche, but I wonder if anyone else will take the plunge and make a more generally useful "mini-laptop."

Wednesday, May 30, 2007

UML Action Semantics, Naturally Parallel

Earlier in my career, I had the honor of reviewing a part of the UML spec which involved a very surreal phone meeting with one of my heroes in this industry, Jim Rumbaugh. The area was on the UML's Action Semantics. At the time it was a separate spec but it is now intertwined in the Superstructure document as UML's Action behavior.

The idea according to Jim was to provide a sort of assembly language that all software behavior could map to. But I thought it provided a more powerful concept, that of the Action itself. An Action is a unit of behavior that has inputs, does some processing, and produces outputs. The outputs of one action feeds into the inputs of other actions. The "Ah-ha" is that all actions that have their inputs satisfied theoretically run in parallel.

This concept isn't new. Hardware designers have been thinking this way forever. I believe Petri nets present a similar idea in mathematical terms. But what struck me was this was a really powerful paradigm that can make it easier for programmers to write highly parallel programs. What was needed, though, was a good, 2-dimensional programming language that allowed programmers to create actions and hook up the inputs and outputs quickly and, of course, with minimal typing. But something like that really wasn't an objective for UML.

It's probably one of the reasons I'm keenly watching Eclipse's Modeling project. Aside from a great framework for creating domain specific languages, it has the capabilities that would be needed to build this "Action" language. And with a good back end that produced code for today's multi-core clusters, I really think this could be a good way to help programmers meet Intel's challenge that "Software has to double the amount of parallelism that it can support every two years" to catch up to the what the hardware guys are doing.

Monday, May 28, 2007

How Different Are Linux Distro's anyway?

In my years in software development since Linux has taken off in popularity enough to warrant commercial software vendors porting their wares to it, one thing I've seen vendors having trouble with is dealing with the massive number of different Linux flavours out there. Back when we were just Windows and Unix (commercial *nix's if you will), life was so much easier. The operating system vendors ensured that the releases were well defined so that we could easily put together a reasonable list of supported versions for our products.

With Linux, it really is next to impossible to do that. Novell and Red Hat do fill in that role as commercial Linux vendors that provide a stamp of approval over their versions of all the packages that go into a Linux distribution. But, really, none of the developers I know that are using Linux are using any of those commercial Linux'es. They're using Fedora, OpenSuSE, and more lately Ubuntu. It really is impossible to validate your products against all the possible combinations of Linux that your customers may want to use.

But, I then ask the question, so what? How different are these distributions anyway that makes it so hard to support Linux. Yes, you may have version differences in the packages, and things like the major versions of GTK can break under GUI applications like Eclipse. Also, it's pretty confusing the number of different ways to set up user's environment variables, but then applications shouldn't be relying on that anyway. I really wonder if there's much else that can affect most software products.

It bugs me every time someone tries to explain away a bug with, sorry, that version of Linux isn't a reference platform so we can't look at your problem, especially when the person is using a recent distro like Ubuntu. But it really does speak to the challenges that software vendors face with the fragmentation of the Linux market. But I guess it's part of the price we pay for "freedom".

Friday, May 25, 2007

cdt-dev is my office

Today is RC2 day for CDT 4. As we get closer to milestone build dates, I send out friendly reminders to the cdt-dev mailing list on what bugs are still open against that milestone. It's just a prod to get the developers to do something about them so that we have no open bugs on a milestone when we do the build. It's worked every time as we get the friendly but odd 'Zarro bugs found' message from my bugzilla query when we're ready.

RC2 was no different. This morning we had two left. Ken from Austin, Texas gave an update on his asking for feedback. I, from Ottawa, Canada gave some feedback for him to go ahead and fix it. Bala from London, England mentioned he had a patch ready for his and Mikhail from Russia replied saying he was looking at it. I'm confident we'll be ready in a couple of hours to fire off the build and get the RC out by the end of the day.

This happens regularly on the CDT and once in a while I stand back and think of what just happened (and I think I've probably blogged about this before too). We have a very effective development team working on the CDT, and the cdt-dev mailing list is the backbone of that collaboration. A lot of groups use different technologies such as instant messenger or IRC channels, but for us the cdt-dev mailing list works great. Bugzilla comes in at a close second. But then, we treat bugzillas as mini mailing lists anyway.

I think the biggest benefit of the cdt-dev list is that it's open to anyone. If you want to see what's happening with the CDT at a high level, that's the place to go. If you want more detail, then you really got to watch the bug reports and signing up to receive notifications on the cdt-*-inbox accounts are the best way to catch the train.

From my experience on the CDT, the most important tool you have to build a community is open communication, like mailing lists, forums, IRC. As your community grows, the only way to really talk to them all is via open communication, so it really forces you down that path and you end up doing it anyway. But in the early days, it was a hard habit to get into, especially when QNX was by itself, or even when I was at Rational and we started working with the QNX gang who were only a 5 minute drive from the Rational office. But open communication has really paid off in the end for the CDT and the reach of our cdt-dev mailing list impresses me time and time again.

Tuesday, May 22, 2007

Open Source Ripped?

Bjorn made me read this article by Howard Anderson. Well, he didn't make me, but it is a topic I'm very interested in as well: How does open source make sense in a commercial world?

It's actually a very interesting article. When I finished it, I had to remind myself of the title. In the end, I wasn't sure if he was for or against open source. His general thesis seems to be that open source is a tool used by small companies to gain market share against big companies. Yes, he's right. I've seen that. There are a lot of smaller companies shipping a world class IDE with their products making them more attractive. They leverage open source (i.e. Eclipse) to do it to lower costs since building a world class IDE is prohibitively expensive for most. I think it's a great business model. I guess he was just looking at it from the big proprietary company side.

There are a couple of areas where I have to disagree with Howard, though. He mentions open source is a "religion". Well in some circles, I guess open source participants see it that way. Certainly from the outside it looks like Richard Stallman is playing the part of a religious leader, and FSF is his church.

Howard also seems to believe that the people writing open source are doing so at night when they come home from their real jobs of working on proprietary software. But that's not what I do as an open source developer. Open source is my day job. The company I work for is one of those companies that is reaping the benefits of the open source business model, and is willing to invest in open source to help build a community where we can share the work with each other. And there are lots of developers like me from many companies. Open source is not a religion to us, but a business means to a business end.

So while it'll probably be impossible to shake the stigma of the open source "religion" from what we do, open source in the spirit of "co-opetition" (co-operating competitors) is a vital tool available to the commercial world. Some communities are set up for this to work well, like Eclipse, while others, not as much (and I won't name them unless over a beer :). But the ones that are, seem to be the ones that the big proprietary companies fear the most. Which means we must be on to something...

Thursday, May 17, 2007

Bye-bye 32-bit Windows

I just read that Microsoft was putting an end to 32-bit support with their operating systems. I guess that shouldn't really be a surprise. It is a real struggle for device driver writers to support both and I think Windows 64-bit has really been hurt by that. The same is probably true for Linux as we don't see much demand for the 64-bit Linux version of the CDT either at 2.5% versus the 32-bit Linux at 20%.

Maybe this will finally trigger people to focus more on 64-bit and start writing programs with that in mind. The biggest change for C/C++ programmers is the size of pointers changes. I've seen a lot of code that assumes you can merrily cast a pointer into an int and back and everything is happy. One example of this is with Java native code where we like to stow away pointers in Java fields for later calls back into native-land. Well with 64-bit, while the size of pointers change, the size of int does not. I'm also hearing that there are different interpretations of the sizeof(long) where on some platforms it's 64-bits, but on others it stays as 32. Then there's long long (gcc) and int64 (msvc) which in the 32-bit world also means 64-bits.

Suffice it to say that the 64-bit world gets a little messy. We'll think back to the simple days of 32-bit with a sigh. But then, I think things will still be better than the now ancient 16-bit world was (now who's old enough to remember that?). Now they say that this will start after 2008, but given the length of time it took to get Vista out, people with 32-bit only machines shouldn't worry too much. They'll be ready for the dumpster by then anyway. And do we really need another operating system version beyond Vista? Microsoft hopes so, and I'm sure they'll use the 64-bit push as a marketing ploy to help you think so too.