This month we made the biggest change to our internal systems that I've ever done. We finally switched from being primarily Windows based to being Linux based. That doesn't mean that we've switched from doing Windows development work to Linux work — what it means is that we've done most of the transition from running Windows with some Linux virtual machines to running Linux with some Windows virtual machines.
Part of the motivation is of course wanting to work on a Linux port of FOST.3™, an effort that will now get a bit more impetus behind it. It does however mean some massive changes to how we work and therein lies the good and bad.
We ended up choosing Ubuntu as our distribution and we're now using Hardy Heron (which came out last week) on everything but our main server (which will get it when we do a re-install to clean up from the experimental build it's currently running).
The things I really like about it are:
The things I hate:
The experimental server installation we started with has certainly taught us a few things. I guess I've been doing all sorts of things wrong, but neither Samba nor NFS seem especially reliable or useful for networking. I find this pretty surprising, but I guess it explains why everybody uses rsync instead.
Clearly some of these are problems of expectation and lack of knowledge of Linux compared to Windows, but there are some clear philosophical differences. Windows computers seem to come pre-packaged to work as a team player (I'm thinking especially of domain networking here), whereas on Linux each machine prefers to be its own master. Windows also provides a consistent if unexciting desktop experience. Linux provides a much more exciting desktop which is much better when it's better, but is unfortunately much more frustrating and difficult when it's bad.
As for us, we can live with things as they are for now. The new network configuration isn't ideal and many things work much worse than they did under Windows, but I expect that will improve over time as we learn more about the platform which in any case is a pre-requisite for building reliable software on it.