Hibernate, presented

Local, Open Source 4 Comments

I reprised my former role as ‘wizened business software guru’ last night by giving a presentation to my local developer community on Hibernate, the Java-based object-relational mapping system (ORM). I really like Hibernate; not only has it got an enormous amount of features, and performs really well, but it’s also built on very sound design principles. As someone who has used several ORMs in the past, and written a couple of my own going back a decade or so, I can appreciate the thought that has gone into it.

I think it went down pretty well - I discovered I had a bit too much to cover when I did a timing dry-run so had cut a few things out at the last minute, but I still had to get my skates on to keep it at around an hour - I hope people didn’t feel too bombarded. I really just wanted to get across just how mature frameworks like Hibernate are; most of the local developers are .Net-oriented and thus being a fan of Java for business software I sometimes feel I have to defend it, now that it’s no longer ‘trendy’ - it may not have all the latest language-level gimmicks, but in terms of robust, tested and feature-laden frameworks it still leads the pack - if you’re building something non-trivial I don’t think there’s a better place to do it. I think it’s easy to concentrate too much on low-level language issues (which .Net scores very highly on indeed), and not enough on the wider supporting ecosystem - language tricks and tool integration make a development environment feel more productive, but there’s simply nothing more productive than not having to write the code in the first place! Java still gives me the most confidence that I can just use plenty of existing standards and frameworks and assemble a decent sized application without hitting things that aren’t finished yet. Plus, I like that it’s fully cross-platform with a huge amount of open source support of course. I briefly covered NHibernate (.Net port of Hibernate) at the end of the talk, which like most .Net ports of Java software lags behind the original and misses a few features, but is still probably one of the best ORMs you can get in that environment at the moment. LINQ to Entities may eventually squash it of course, once it matures enough - again I have to shake my head at Microsoft’s ‘Not Invented Here’ attitude that will cause them to have to recreate all of NHibernate’s features, and thus put their users through a year or more of shaky maturation, compared to if they just adopted, wrapped, enhanced, or provided support for NHibernate. But we know they don’t play well with others ;)

I was pleased to see a couple of people from our local Mac store came along too, who had apparently done some Java coding before. I actually did the entire presentation (including demo) on my MacBook Pro using Open Office and Eclipse - gotta love cross-platform, open-source software. I developed both the code and presentation hopping back and forth between Windows and OS X, depending where I happened to be on any given day - I love that I can do that seamlessly with these tools. And of course Eclipse is a delight to use, one of the few tools around that can beat the living daylights out of Visual Studio.

I managed to squeeze in a few bits of from-the-trenches design advice along the way to explain why I’d advise doing things certain ways - and I was quite surprised at the number of blank faces when I brought up things like the Law of Demeter and the n+1 selects antipattern. I guess I’m a bit of a design geek anyway, but this is the sort of stuff that really does affect software quality and performance in decent sized application, so I hope the nuggets were useful to someone.

Anyone who wants to look at the slides can do so here. To recreate the entire experience, just imagine a short bearded guy talking way too fast and waving his arms about. ;)

The price of innovation

Open Source, Political 5 Comments

I often wish I could post more here about the work I do. It’s an unfortunate fact of the industry I work in that ‘innovation’ often also means ’secrecy’, and such things generally go against my innate nature - I like to think of myself as a sharer of knowledge, an active participant in a global intellectual cauldron that spawned the open source development approach, among other things. When I find something out, I generally want to tell people - I want to show it to them, and have them pick it apart and give it back to me with a bunch of Post-It notes attached telling me all the things I did wrong and how I could make it better. Then, I want to rinse and repeat that until together we’ve made something awesome that we all can use to our respective benefit, and that none of us could have created alone. It’s a nice principle, and it’s one that underpins every open source project out there.

Unfortunately, there are frequent instances where that isn’t possible, usually because the work is deemed to be valuable IP that shouldn’t be shared with others. That’s fair enough - it’s being paid for after all and the company funding it should get to choose what’s open for scrutiny and what’s not. I personally think that in a lot of cases, there could be significant benefits to the company in question to allow public sharing of the work, since there are a lot of smart people out there who always come back with improvements to pretty much anything you publish, so the return could be very valuable compared to relying on expensive internal development alone. However, I’m the first to admit that I haven’t exactly gotten rich on my open principles so far - on the contrary, the majority of the work which keeps me in coffee and snacks is of the traditional proprietary model. I just can’t help thinking about just how much each of us is reinventing and recreating in this model that each company considers its ‘unique IP’ but in fact if offset against the amount that could be done in collaboration, would pale in comparison.

Now, I’m also not naive - IT companies rely on IP for their balance sheets. The traditional answer to creating value out of open processes is to charge for services rather than products, but really that only works at scale if you’re dealing with mainstream business software - office servers, CRM, ‘insurance policy’ support agreements, that kind of thing. Big business is willing to pay for services it doesn’t need, or hopes not to use. Out at the fringes, and I consider 3D to be there in the grand scheme of things, there’s a lot of people who are more interested in products than services; they just need something that does ‘X’ really well, and don’t need a support contract or a complicated service leasing model. So, I think there are plenty of areas where a proprietary software model will continue to be required to keep people in jobs, and as such not everything can be open. However, I also think that there’s a lot more scope for core services to be provided by open source solutions, and perhaps more importantly for the companies using them to more fully embrace the open model for what it is, as an evolving opportunity for advancement  - not just a resource to use as-is, and to take the minimum action to comply with the license. Proprietary products can and do differentiate themselves via user experience, smart automation, and other combinatory advances, without precluding open collaboration at a deeper level. Some companies do subscribe to this, as is evidenced by the participation of their employees in our OGRE forums, but an awful lot do not.

The fact is that collaboration is the number one reason why an open source project exists and is mature enough to use anyway, so if a company chooses it, it’s acknowledging that ‘the system works’. I’m going to assume most of these companies don’t want that base to stand still, even if it is already good for their purposes. By embracing the open model that created it, it’s possible to take that base platform to the next level in partnership with others, quicker than could be done with internal development alone. Sure, competitors will get access to that technology too, but I rarely see any products that genuinely rely on technology alone - mostly it’s clever combinations of raw tech. But there’s also this - would they actually have gotten more done by keeping it all to themselves? Or have competitors just been inventing the same stuff in their own labs too anyway, levelling the playing field? How about if by spending that effort in the open, it was magnified by a factor of 5 through collaboration with others? They’d be in the same position relative to their competitors, but everyone is 5x further along than if each person is driving their own pump. Assuming that possibilities for high-level differentiation are proportional to the sophistication of the back-end plumbing, aren’t they actually better off from doing some of their work in the open instead?

I have a vested interest in this, of course. Perhaps through explicit recognition of the value of collaborative open projects as a base for higher-level innovation, and greater active participation in them by commercial organisations, more open source projects outside the traditional ‘business plumbing’ arenas might get  funding just to do what they do, instead of their members having to make a living doing other things. In a word, it would be wonderful to be able to be truer to our core principles and pay our bills at the same time, and I do think there’s an argument that says it isn’t entirely incompatible with traditional commercial thinking.

Am I nuts? Maybe. But I hope I got you thinking

The new, cuddlier Microsoft?

Open Source, Tech 7 Comments

Big news today - Microsoft’s top executives have held a press conference, stating on record that they will be opening up access to APIs and protocols associated with Windows and related technologies to an unprecedented level. That means, among other things:

  • It will publish full API documentation for Vista, Windows Server, .Net, SQL Server, Office, Exchange, Sharepoint and such
  • It won’t sue open source developers working on non-commercial projects over patents
  • It will charge "reasonable and non-discriminatory" royalty levels over patents for writers of commercial software implementing Microsoft APIs and protocols
  • They will allow developers to plug-in new document formats to Office

One of the key factors here is what "reasonable and non-discriminatory" royalty levels actually means - after all, non-commercial outfits aren’t a direct competitor for Microsoft’s core business customers, the offices which require that their infrastructure is provided by professional, commercial outfits. If it transpires that a commercial third party can make a fully Windows-compatible OS and sell it (or simply services around it - if for example that OS is Linux) at a competitive price against Microsoft without being crippled by royalties, then we will have finally reached the stage of true competition that has been missing for so long. Will we get there? I’m not sure - obviously Microsoft has a head start in its favour, and will no doubt only have to release APIs when new / revised products are finished; thus they’d be able to keep their edge just by releasing new revisions regularly and getting people to move to them. Previous API releases such as those made available to the EC also haven’t exactly been inspiring in their clarity. But, it’s unfair to pre-judge.

Oh, and they don’t think open source is communism or a cancer anymore, apparently Craig Mundie loves us all now. That’s sweet.

I’ll personally be watching and waiting to see exactly how this new policy pans out, and whether it actually results in genuine competition in the marketplace or not. Really it’s the results that matter, not the rhetoric. Maybe Microsoft really has gone all soft and fluffy on us, or maybe the outcomes will be considerably adrift from the sales pitch and it’s all part of a plan more devious than we could ever possibly imagine. Time will tell.

Fickle creatures are we

Open Source, Tech 9 Comments

I talked a few days back about my preferred Eclipse plugins, and that my chosen Subversion plugin was Subclipse. Subclipse has been going for many years which is why I instantly gravitated to it without really thinking about it, but David was good enough to recommend in the comments that I should take a look at an alternative: Subversive. Since Subclipse has been working just fine for me it took me a while to get around to doing it, but I finally did today.

One thing that instantly strikes you as soon as you go to the Subversive site is that it’s now an Eclipse ‘incubator project’, which means it’s one step away from becoming part of the core Eclipse distribution - this is despite the fact that Subclipse is the longer running project. Indeed if you Google for ’subversion eclipse’, Subclipse is hit #1 while Subversive is down at rank #6 - so I was now very curious as to why Subversive had been picked over Subclipse. As it turns out, it sounds like some of it was related to IP, but even so you have to believe that they wouldn’t have picked a less functional project.

So, I tried it out. Annoyingly, switching SVN provider disconnected all my projects from their repositories (grr) but luckily I didn’t have any local changes and it was easy enough to reestablish the connection. At first, most things looked roughly the same, the project icons were the same, menu structure very similar - after all, the connector is mostly a back-end after all. However, a single feature had an undeniable psychological impact on me - that Subversive is smart about detecting & interpreting common Subversion folder structures, like this:

In contrast, Subclipse just displays those as simple folders. It’s silly really, but a little difference like that is enough to make me prefer Subversive - it won’t affect my workflow at all, but it just makes me feel comfier. The moral is of course that users are incredibly fickle in their allegiances. especially when it comes to pretty icons ;)

For the record, Subversive has some other nice features too, such as being able to group history views by date and to interleave repository history with Eclipse’s local save history. On a subjective level the Team menu feels a little more polished too, even though the options are exactly the same - it’s those darn icons again no doubt. There’s nothing here that’s a killer blow, and Subclipse would have continued to serve me just fine I’m sure, but a few niceties and the the fact that it’s an incubation project now have meant I’ve switched allegiance to Subversive. I hope Subclipse doesn’t hate me for it.

Amazon S3 as an online backup service

Open Source, Tech, Web 7 Comments

I’ve been thinking about subscribing to an online backup service for a little while; after all while a scheduled backup system to an external drive / NAS is all very well, if something should go seriously wrong (heaven forbid), you really need an offsite backup of your most critical data. There’s only so long you can go burning DVDs or removing hard drives and persuading friends / family to keep them at their houses before it starts to get unwieldy. As a small business, you often don’t have the option of fireproof safes and staff to do a proper offsite rotation system all the time, so with increasing broadband speeds online backup is starting to look more attractive.

There’s plenty of dedicated options there, like Mozy and Carbonite, and they’re fairly inexpensive, but most of them are aimed at home desktop PC users, and as such typically only have Windows and (sometimes) Mac GUI interfaces. Automated Linux server backups tend to be limited to the business versions, if they’re available at all, which come at a higher price. So I kept looking.

I happened across a number of services that piggy-back on Amazon’s Simple Storage Service (S3) - one of several web services that Amazon provide to developers who want to create online solutions without maintaining a scalable data centre of their own. It has the significant advantage of being rather cheap for small volumes, given that it uses a very fine-grained pricing structure (US hosting, EU hosting is 20% higher):

Storage $0.15 per GB, per month
Transfers In $0.10 per GB
Transfers Out $0.18 per GB up to 10TB, savings after that
PUT Requests $0.01 per 1,000
GET Requests $0.01 per 10,000

This means you’re never paying for more than you need - if you store 10GB and transfer the same amount in every month (unlikely), say with less than a thousand PUT requests, you’re going to be paying $2.51 per month, which isn’t half bad - some services like Carbonite have unlimited storage (per PC) for a fixed price though so if you go beyond a certain level you might be better with something like that, but again they’re aimed at desktop users. Personally, because I’m only using it to store my most critical documents, and I’ve already compressed them, I don’t expect to be paying more than about 50 cents per month. Services like JungleDisk, ElephantDrive and ElasticDrive all use S3 as a back-end storage, and provide the friendly front-ends which AWS/S3 doesn’t (it’s basically just an API). Of all of these, I liked JungleDisk the most, because it’s inexpensive ($20 for any number of PCs, over and above the S3 charges) and comes with a Linux version, which just requires you to install the FUSE module, whereby you can mount an S3-backed, locally cached drive onto your server an rsync directly to it. It also supports encryption so the files that are uploaded to S3 aren’t readable by anyone else.

In the end though, one thing struck me about all these services - useful though they were, you were dependent on a piece of software from a relatively new startup, and the file structures they create on S3 are typically encoded in some way - this is out of necessity, since S3 doesn’t support any notion of directories, it deals purely in terms of ‘buckets’ (which have to be globally unique) and ‘keys’ which actually store a block of data, ie a maximum of a 2-level system. JungleDisk have released some source code to show you how to get data back out of S3, should you want to do it independently of their software, which is a nice touch, but still, if the JungleDrive service was discontinued it would be a pain. In my travels, I’d come across a few open source solutions, so while they required a bit more effort, I thought it was worth investigating.

In the open source arena there’s a number of options, but out of those the ones I took most seriously were:

  • Amanda now supports S3 as a target, 
  • duplicity looks like a nice automated backup system with GPG encryption which has added support for S3 in recent versions
  • s3sync is a Ruby script package which provides you with an rsync-style S3 implementation as well as a command-line tool for manipulating your S3 store (very useful in its own right since S3 don’t provide any tools)

Amanda would have been great, but it appears the S3 back-end is only available in the enterprise edition sold by Zmanda, not the open source version yet, which is disappointing. Duplicity also looked nice, but S3 support was only added in the recent versions, and it had a lot of dependencies and would have been a lot of trouble to set up manually on my server box, which is still chugging away on Debian Sarge and thus didn’t have recent enough versions in its stable list. An upgrade to Etch is definitely on the cards sometime soon, and I of course could have just grabbed the source packages, but I wanted to try out a simpler solution for now.

In the end, I went with s3sync. It has a few disadvantages over the other two, in that it doesn’t archive files up or compress them (leading to higher PUT/GET requests and transfers) and most significantly it doesn’t encrypt files - it can operate over SSL, but the files themselves are unencrypted, leaving them open to any Amazon employee or a server compromise once uploaded, which for my business documents was not acceptable. So I just scripted around that - I just use a standard incremental TAR backup of my most important directories, encrypt the results through GPG, and then use s3sync to upload the resulting data to S3. Works like a a charm - I get a small number of encrypted archives getting uploaded each time, and they’re small because they’re just diffs. The only problem I did have is that I didn’t check my Ruby version against the s3sync README - again Sarge was too old here, its Ruby 1.8.2 meant that all commands would work except uploading, which puzzled me for a while as I was still learning the nuances of the S3 system :? Luckily sarge-backports made it easy to grab a conforming version (and of libopenssl-ruby) which solved the problems.

Overall, I like S3 as an online backup back end - you can’t complain at the prices, and it’s nice to know that your data can grow as large as you like without crossing any major billing boundaries, and is taking advantage of Amazon’s infrastructure. I can see why startups are using these services a lot - being able to start small and grow without the infrastructural pain is a serious bonus (although its not perfect). For end-users I’d probably still recommend JungleDisk - it benefits from S3’s cheap prices while having a nice user interface - but if you’re a bit more picky about feeding your data through closed tools or having more control over the process, then you’ll want something else. If you have complex requirements duplicity looks worth your time, or if your requirements are fairly simple like mine, s3sync is a good low-level solution with very few prerequisites, so long as you remember to encrypt your own sensitive data.

Recommended Eclipse Plugins

Development, Open Source, Tech 13 Comments

I like Eclipse a lot. As many of you know, I’ve developed business software for just as long as I’ve been doing graphics software (and learned a lot from both worlds), and through that I’ve used Eclipse in various forms over a number of years - it’s really quite incredible how far it’s come in that time. If you discount the language dimension (Visual Studio is still my preferred C++ development environment) Eclipse is easily my favourite IDE to use - although in practice you have to be a Java developer to really get the best out of it. There’s just so many things to love about it, like:

  • Powerful in-built refactoring tools - including ‘refactoring scripts’ that can be deployed with your new library versions to help clients of your library upgrade
  • Quickly resolve most errors and warnings with just ‘CTRL-1′ (and in the latest version, the ability to automatically derive missing generics parameters got me smiling),
  • User-defineable ‘perspectives’ which let you switch easily between window layouts, each with a different emphasis (dev, test, debugging, database, web configuration, team updates, bugs / tasks etc)
  • Integration with Bugzilla and Trac for task / bug reporting
  • Background compiling that gives you instant feedback on errors and warnings
  • Probably the best SCC feature set I’ve seen in an IDE, including 3-way merge, easy previewing of repository updates you’re not currently in sync with without updating, and even a ‘local history’ system that lets you roll back individual uncommitted changes that haven’t touched the repository yet, down to the granularity of individual saves.

And that’s just some of what comes with it out of the box. Beyond that, perhaps the best feature of Eclipse is the plugin architecture, which allows plugins to be really nicely integrated into any aspect of the tool, including being able to point Eclipse at remote plugin sites for easy installation and updating, and the core documentation being extensible such that looking up plugin documentation is all pretty seamless after the install. The sheer number and variety of plugins available is probably what keeps it ahead of NetBeans (and makes Visual Studio’s plugin system look quite limited and weak), which has started making up the ground a little in recent years. I’ve been tinkering with Java development again in the last month for a side-project and so revisited the Eclipse landscape again, here are my current picks:

  • Subclipse: A no-brainer, provides the interface from Eclipse’s team synchronization views etc to Subversion repositories
  • eUML2 : UML modelling tool with round-trip integration, is commercial but free edition is ok for commercial use and is highly functional
  • Azzuri Clay : Database modelling plugin with reverse engineering
  • SQLExplorer : An improved database perspective view, easier to use and richer than the default ‘Database Development’ perspective that comes with Eclipse

There are others that are useful depending on the kind of application you’re working on, such as tools specific to your application server, helpers for libraries, reporting tools, UI designers etc, but this set I find useful for most projects. And best of all, you get the whole lot for absolutely no money down - that’s really quite incredible value given the quality on offer here. Anyone else got any favourites?

Gutsy revisited - Envy, Compiz & Shared Folders

Linux, Open Source 6 Comments

Yesterday’s Ubuntu install didn’t exactly go entirely to plan, but today I spent a little time trying to resolve things. My overall approach to this is to try to use the most user-friendly tools available first before starting to hack on the command-line - as a fan of running Linux servers which don’t even have an X server running this might seem odd, but I really want to know how well Ubuntu does as a user-facing OS while I’m doing this. For a server I just want something that does its job well, is resource-friendly and fast to admin remotely, hence SSH-only admin access is a perfect fit for that purpose. Desktop OS’s need to be configurable via their GUI alone to pass muster.

I had located Envy yesterday, a third party application for automatically configuring NVIDIA and ATI drivers, so I downloaded it and tried it out. And what do you know, it worked flawlessly, downloading its own dependencies and the drivers, modifying the Xorg config without ever having to touch any files manually - a swift reboot and my HD 2600 was purring along in accelerated mode - no upgrade to 8.04 required as had been suggested. I examined what it did, and it really just performed the manual steps I’d seen documented elsewhere for installing the ATI drivers, but importantly it wrapped it all up in a user-friendly package. Kudos to Alberto Milone for this work, the real question is why Ubuntu couldn’t do this itself, or isn’t packaged with Envy in the first place.

I had a little bit of fun with Compiz - the 3D desktop manager which is enabled by default on Ubuntu now. Most of the effects are of course shamelessly ripped off from either OS X or Vista, with the exception of things like the ‘desktop cube’, shown here on the right. It’s generally very attractive and very configurable though, so on the whole I like it. I do think the settings need to be exposed in a more friendly way in future versions though, it took me a while to figure out how to enable different plugins and configure the combinations of them appropriately.

Because Ubuntu’s package manager is apt based, it’s very easy to install new things and the Add/Remove applications UI is pretty intuitive - arguably it’s easier for a regular user to grab a bunch of extra software than it is on Windows and OS X because so much of it is right there in front of them. I’m used to apt on Debian and I must admit that it was hugely painful to have to use RedHat’s up2date and RPM-based tools after that; nothing is better than apt at resolving dependencies and tidying up after itself IMO. I liked that in a number of cases, Ubuntu realised that I needed new components to do something I wanted and offered to install them automatically, a nice touch.

A case in point is file sharing with Windows machines - opening the Shared Folders view immediately offered to install the NFS and Samba services. All well and good, and sharing a folder was very easy. But - and this is a big ‘but’ - it fell at the last hurdle because it fails to configure any Samba passwords by default, so while you can see the share, you can’t actually access it! You have to drop to a console and issue the usual ’sudo smbpasswd -a <username>’. That was a huge disappointment because after the auto-install of the services it was really looking like it was going to be nice and automated.

So, I’m feeling a little better about Ubuntu now that Envy solved my driver issues, however it still has many rough edges which make it hard to recommend to non-geeks yet. It’s probably one of the friendliest desktop Linux attempts I’ve seen so far, but it still continues the tradition of stumbling at the last usability hurdle - like the failed driver install, and the missing final step of the shared folder configuration -  a less technical user would have just hit a brick wall and probably given up. It’s definitely getting there, but that last 10% is obviously still proving tricky.

A Gutsy Fighter

Linux, Open Source, Tech 14 Comments

I haven’t had a lot of time to play with much lately, but while I processed some OGRE patches (ie during the times I was waiting for builds) this morning I finally got around to installing the latest Ubuntu 7.10 (Gutsy Gibbon) on my new test box. It already has XP and Vista on it, so it’s getting quite cosy in there, but since the box is only for testing I can afford to burn a fair amount of space on OS overhead.

Firstly the positive points:

  • I like the fact that it’s a combined Live CD and installer, that’s a nice touch. You can have a play with Ubuntu (albeit rather slowly) before you choose to install
  • The install was very easy. Not very many steps, and I could just let it use the remaining spare space on the drive since it’s the last one to the party. The default bootloader setup chains nicely back to the Vista bootloader, which in turn chains back to XP, no issues there.
  • The default desktop is attractive and runs decently even without any specific acceleration
  • The online update options are prominent and simple as soon as you start up
  • There’s finally an ‘install proprietary graphics drivers’ option when you first boot up

So first impressions were good. I still don’t find the Gnome desktop as professional looking as either Windows or OS X, it still has a slightly unpolished feel to it; nothing major but the feeling is definitely there. It wouldn’t stop me using it, but my visceral impression is that it feels a little cheap.

More importantly though, the quick ‘install graphics driver’ feature, the presence of which had the potential to mollify one of my primary gripes with previous desktop Linux experiences, totally failed to deliver. It correctly detected that I had an ATI Radeon in the machine (specifically a HD 2600), and went on to download and install the driver, prompting me for a reboot. All well I thought. Unfortunately after said reboot I was confronted with a sequence of video mode changes that were clearly trying to configure the X server, followed by a fallback to ‘low res’ mode which is even worse than the VESA mode it started up in. I experimented a little with telling it specifically some details about the hardware, but that didn’t work either. Once again I’m confronted with the situation that X server / video driver configuration on desktop Linux completely sucks.

I didn’t have any more time to fart about with it today so it’s been shelved for now. Afterwards I found a thread about Envy which is supposed to make the process slicker than the default Ubuntu version, so I’ll try that next time I have chance. However, I still can’t get away from the fact that some variation of this X server nonsense happens to me every single time I try to install a desktop Linux, no matter what distro I use, and continues to be the primary reason why I find it hard to take it seriously. I know drivers are not easy, but the fact is that Windows and OS X never make this process as awkward as Linux continuously does. Is it something fundamentally overcomplicated in the design of the X server perhaps?

Here’s what I want to do: 1) install OS, 2) install graphics driver, 3) get on with stuff. With desktop Linux, for me at least, it’s always been: 1) install OS, 2) install graphics driver, 3) spend the next few hours arseing about trying to get the graphics driver and X server to work properly together. That’s not time well spent. I love Linux on the server, I really do, but I really can’t see why in 2008 setting up a graphics card is still a hard problem.

Brightens my day

Business, Open Source 2 Comments

SCO on the brink of final collapse

It just makes you feel warm and fuzzy inside that for once in this crazy industry, bullshit did indeed walk.

Open source adoption; countering the fear and doubt

Business, Open Source 10 Comments

For some reason, open source solutions aren’t that popular where I live. Historically, the UK has lagged behind the other major developed countries in North America and Europe in open source adoption, for reasons I’m not entirely clear about, but generally that attitude is changing over time, as discussed in a report issued by Atos Origin a couple of years ago (funnily enough, I worked heavily with Atos for several years in a previous job on a project that included many open source components). However, I’ve generally found that locally, there’s a little more resistence to open source adoption (and I’m talking in the context of developing custom applications now, not off-the-shelf software) - that is, except in a few rare pockets.

I try to attend my local developers group meetings whenever I can, but I always find myself feeling like the maverick in the room since the vast majority of the people there are heavily invested in purely Microsoft technologies - to the extent that many would rather wait for Microsoft to implement their own version of a given framework / feature, than risk using an existing open source solution, regardless of the comparative merits. The primary arguments for this approach are as follows - hopefully I’m not misrepresenting them, I’m trying not to put my own spin on them:

  • Features that are ‘in the Microsoft box’ are easier to set up and are more consistent with existing components
  • It’s more acceptable to deploy to most customers, who are comfortable with Microsoft products, but who would resist deploying other products
  • Microsoft isn’t going away any time soon, so they feel more confident that the feature won’t be abandoned or turn out to be the ‘wrong’ decision
  • Microsoft haven’t abused their single-supplier position (in terms of if you use the most recent versions of .Net, you have to deploy on Windows / SQL Server) in the past, and aren’t likely to in the future

Now, I can see some of the reasoning behind these arguments; I’m not going to say they’re invalid because they’re clearly derived from the personal experiences of the people concerned, and I respect their opinions - even if I don’t necessarily agree with them. In contrast, my experiences have led me to very different conclusions:

  • Assembling ‘best of breed’ components based on individual merits can often give superior results to sticking with what one manufacturer produces, and in practice isn’t as difficult as is made out
  • Brand loyalty is not necessarily a sound basis for purchasing decisions
  • Good open source projects aren’t going away any time soon either; pick a popular project and it will last as long, if not longer, than any Microsoft product. In fact, Microsoft has a habit of changing tack pretty often when it comes to the recommended set of libraries to use.
  • Genuine competition among suppliers is important to maintain a proper balance; never trust that a supplier will not change something when it suits them even if it adversely affects you. The more control you have over the solutions you use, the better.

I have to say that most of the caution and outright resistance that I’ve experienced over the use of open source, in all the circles I move (business software and graphics software), at its heart comes down mainly to fear. Fear of the unknown primarily, and I think that the main issues are:

  • Confusion about choice - in culinary terms, Microsoft is a set menu, open source is an all-you-can-eat buffet. The set menu needs very little thought - you just turn up and take what you’re given. It might be good, it might not, but it’s low-effort because someone else has already lined it all up for you; just watch out if you’re a vegan. At the buffet, you’ll get a huge amount of choice, and you can be sure there will be at least something you like and which meets your particular dietary needs. But it requires a bit of active participation from you to decide what’s best for your needs. Personally, I consider choice to be a blessing, but it’s clear that to some, choice is a distraction.
  • Fear about Longevity - anyone who’s used proprietary software will at one point or another come a cropper over obsolecense - if you haven’t, you’re one of the lucky few. As such, it’s understandable that people would be apprehensive about ‘backing the wrong horse’. However, what is often not appreciated (IMO) is that open source changes the rules to the degree that it makes it less likely that you will be caught in this trap. The most common causes of obsolecense, in my experience, are company acquisitions, introductions of new software lines from the supplier, and very occasionally (but least often), company failure. In the former 2 cases, the company explicitly chooses to withdraw the software, or stop supporting it. Because of the closed license, they are able to cut this umbilical to basically force you to spend money on a newer version or alternative product that the company wants to sell you, with all the inherent migration costs on top of that. If this has happened to you, when all you wanted to do was keep your existing software which worked perfectly well, you have my sympathies. The difference with open source is that you always have the source, and as such anyone can support the software, at any version, should they choose to. The more popular the piece of software, the more likely this is to happen. Even with Ogre, which isn’t enterprise focussed and nowhere near as big as some projects, I have people backporting bugfixes and new features to old versions we no longer update - because they can.
  • Fear about Support - a lot of people think that if you use open source software, you’ll need to be digging about in the code all the time with a spanner, and that you’ll be told ‘go fix it yourself’ when you find a bug. That’s not really the case - of course you can tinker around in the code if you want, and personally I find that incredibly empowering, because if you hit an issue you’re never completely stuck - anyone who has hit an issue in a library that they’ve had to try to work around, and wait for a supplier to fix it, will know what I’m talking about here. But popular open source projects are more often than not incredibly well organised, with great free support, and commercial support available if you need a hard SLA. Again because you’re not dependent on a single source of support, you can get assistance from anyone and everyone, and you might be surprised just how forthcoming this is. It feels uncomfortable to those who just want to lodge a support call with one party (in which case, take out a support contract with one of the companies that support open source officially), but once you get used to the community approach, you can find it can be a lot more powerful than the traditional model.

Having lived and breathed open source for the past 7-8 years, my perspective is so different that I find these fears very difficult to understand now, I guess because I’ve just become used to the environment. I’ve in fact had more problems in the three areas listed above with traditional proprietary software in that time, than I have with open source software, to be honest. As such, I’m completely comfortable recommending and using open source, particularly when it comes to frameworks and libraries. In fact I always look for open source solutions first now, no matter what need I have - and in the development field I’m very rarely disappointed. I hope that one day I can convince more people locally of the merits of thinking outside the Microsoft box ;)

*edit: One of the barriers is that, at least based on what I’ve seen, open source projects that use .Net tend to be less successful and less feature rich than their non-.Net counterparts, so this doesn’t help the perception in .Net users that open source projects often fail (when in fact outside that environment, they flourish far more often). I’m not sure why this is, maybe it’s due to the culture - Microsoft never supports open source projects openly the way others like IBM / Sun do, in fact they’ve historically been quite hostile to it (see Gates’ ridiculous ‘communism’ rant), the best they tend to do is just hire people and fold them in to their internal dev teams - cool for the individual but I do wonder how healthy that is for the project itself - does it mostly die off because the person is now concentrating on internal development? There’s also that .Net is still relatively new compared to others (although the popularity of Ruby would suggest that’s not the main issue), and the closed nature of the base platform which must put some open source developers off.