Before I start...
Hi guys, it's been a long time since I left Linux.com. I contributed a lot and even was one of the private beta testers for this site and ran regular blog entries including writing Xlib-based windows managers, and general programming topics for Linux. I felt I had to leave as my Kudos points were stuck at zero no matter how much I contributed - I know this seems a silly reason for leaving, but I felt that fixing my Kudos points was the least the admins could have done for my contributions (especially as people were winning prizes in the early days of the site with the most points), but despite asking several times, my Kudos points remained at zero and I requested my account to be deleted.
I feel that I am now prepared to forgive and forget and going to start contributing again; I hope you enjoy this article!
Custom Distributions & I
A while back I started my own Linux distribution (based on Arch Linux) called LDR. which saw a LOT of traffic/interest hit my server (the most traffic the poor machine had ever seen!). The project itself was a massive flop as I could not hook in any support for other developers, nor could I keep up with the questions from casual users who, as a distro owner, I really should have made my top priority to please. Arch's base installation changed significantly and things broke and the project fell further and further behind whilst my main programming job (which paid the bills) grew busier and busier until I had to stop working on the project completely.
Strangely I have been left with fond memories of the project, it was a great learning curve for someone who up until then would consider himself an noobie to Linux. I really enjoyed being a part of the hype and excitement around a new distro and contributing GPL code that may be, some day, some one might download and use (though by that time, the project will probably be out of date and won't compile?!).
I continue to hope I will be involved in authoring another distribution from the ground up someday.
Working with Microsoft Technologies
I left my job with a Microsoft-technology-based Enterprise Telco. software provider in 2009 as I wanted to concentrate my working hours on developing Linux-based solutions for mission/time critical projects.
I have since then worked on some amazing projects including 2 successful contracts for the British MoD.
I have been working with Linux exclusively until recently when I surprisingly moved back to a Microsoft technology provider...
Don't get me wrong, I haven't given up on Linux; it is still very much a burning passion which I use to bore my pro-Microsoft/Mac colleges; my problem is that I find that Linux lacks the integration and support that I need on a daily basis to produce software to a level that I can be really proud of. It's probably 80% my opinion rather than facts, but I find that Windows - as a platform - offers me the right tools, in the right packaging, to be able to get my job done better.
This article is a brain-dump of the parts of Windows and Microsoft technologies that I would marry together with Linux to produce a distro that would be suitable for..... well.... me! (but hopefully other Enterprise Linux developers and companies too!)
I realize that praising Microsoft on Linux.com comes at the risk of receiving quite a bit of trolling/flaming from said community; but after you've had your fun, I hope you can understand that Microsoft HAVE created some components extremely well, sometimes better than other companies/communities have. Anyone who has tried to stress/load test a PHP web application, MYSQL db and Apache web server at the same time will hopefully respect the fact that because of the disconjointed nature of these components on Linux, aggregating data (like when trying to determine the bottleneck in this application stack) is extremely difficult - someone needs to take all these components, and put them together with loads of "Grade A" middleware glue, so that they work with the developer.
NOTE: I don't have the pleasure to work with Enterprise distributions of Linux such as Red Hat, and I'm sure these distros will include some/all of the concepts I will share with you below, but the truth is - as previously mentioned - I want to be involved in a project from the very start and that's why I'm inventing/dreaming up the concept anew here. Whether I am offering anything new to the table is up to you as a reader to decide (and discuss!).
Things that I think Microsoft did well (checklist)
I'll start by listing all the concepts, components, tools etc.. that I think Microsoft have done a fantastic job in providing and that would need to be included in my concept Linux distribution...
- Performance Monitor - A central place to collect performance statistics - including the ability for a piece of software to supply counters of it's own - so there is a single place to watch metrics, plot them on a chart at real-time or save them to disc for future analysis. Imagine being able to open a performance counter and add Apache counters, MySQL counters, PHP counters, watch these and processor/memory usage in a single place and identify where bottlenecks are happening. The counter incrementing/decrementing/setting would need to be asynchronous so they didn't affect the performance whilst running (altering the state by observing the state... that sounds like quantum mechanics?!! ) - which leads me to the next component:
- MSMQ (Message Queuing) - Since AMQP has become big news, Linux has wonderful offerings in the message queuing arena. MSMQ is an optional installation on Windows, but still a part of the main operating system. Message queues are a fundamental part of programming and therefore should be a fundamental part of the target platform. I can think of a million uses for message queues within an operating system so I think it makes sense to have something like RabbitMQ installed by default and being used right out of the box (with performance counters of course!)
- The .NET Framework & Ethos - I am a massive fan of the .NET framework, but dislike writing Mono because of the lack of features in MonoDevelop. The main reason I like the .NET framework is because it is Microsoft's de facto way for developers to connect to the operating system. All tasks have associated assemblies which means you don't need to use other languages or platforms (WSH == ) to achieve tasks (like IIS6 used to make you use those awful VB scripts to manage the metabase until IIS7 which now provides .NET management assemblies). Java would probably be my platform of choice for Linux, as it's compiled (which I personally believe helps developers produce better quality software) and also well supported, with a plethora of libraries/components that already work with it
- MMCs - Management consoles allow you to manage just about every option on the platform from a single, familiar UI that has the same layout regardless of which tool you are using. HTML developers are told it is important to use familiar presentation techniques, but native application developers seem to do everything bespoke. This isn't always the case in Windows either, for example IIS7 is hardly in-keeping and is simply an example of bad UI design - but the point is that it exists and the concept is there. A tree hierarchy on the left, large item lists or context-based management GUIS placed in the middle and high-level actions from the right bar or by right-clicking on a node in the left-most tree. Windows 2008's Server Management console is a better example of this working, and if it contained better package management tools, it would fit right into my Linux distro!
- The Registry - ~= gconf. Next!
- NLB - Network Load Balancing without a single point of failure by using a shared IP addresses which resolves to a fake MAC address which all machines configured listen in on. Carp is something is similar on Unix (uCarp is a port to Linux) but this seemed very ropey when I've tested it on FreeBSD and Arch Linux. The documentation for uCarp is pretty-much non-existent so it's hardly supported or supportable in an Enterprise environment. LNLB is another similar product for IP address based load balancing but hasn't been updated manually and doesn't compile against a 2.6 or 3 kernel. It might be worth creating something based on these implementations (or creating something anew) because this is a key component in highly-scalable environments
- GUI Tools in general - For every tool, there is a handy GUI tool for configuration/setup. When it's late in the evening and you have to get a new service installed as quickly as you can, and the service of your choice has chosen a new funky scripting language for it's RC scripts, I want to murder the developer. Now is not a good time for you to introduce me to your new preferred RC syntax - give me something I can read!! (no matter how good Erlang or Lisp is, if you've never seen it before, you're in for a headache). At least if there is a GUI tool, actions are in the menu/toolbar and most things have tool tips and buttons with confirmations so I can click around until I break it, then click around some more to fix it again!
- Event Viewer - Linux and Windows tackle logging slightly different ways. Linux, for most part, does a better job, especially when logging from Apache vs IIS (I can haz realtime?). The one thing I'm missing is a central place to aggregate logs and search/sort them. You can do cool things with sys-log systems, but I want a GUI that offers filtering and sorting etc.. quickly and conveniently
- Company Policies - For a corporation to be able to set, for example, the minimum password complexity for their entire company is a real necessity. Having all these policies that can be tailored for the business is something I'd really like to offer!
- Active Directory - More single sign on here than anything else, I've personally attempted getting LDAP, PAM and Kerberos working (with some help from various American Universities) and it was more painful than self-harming?! Creating a domain controller in Windows takes less than 10 minutes and doesn't require any training or complex RC files or understanding LDAP schemes. I seem to remember than even Red Hat offerings in this area were well off the mark. I managed to get a Windows client authenticating against a Linux server after about 2 weeks of trying, I felt like I had achieved the impossible, and unfortunately that was not due to problems with Windows.
What Microsoft does badly that Enterprise Linux also needs
The following is a list of all the reasons why Microsoft is still off my Xmas card list. A decent Enterprise Operating System needs the following implemented properly:
- Network Manager - Windows' Network Manager is an absolute joke. I can see what they've tried to accomplish, but they have made a real pig's ear of the whole thing. If I want to change my DNS settings or set a static IP address, I have to make about a dozen clicks to get to the dialog box. When I plug myself into a new network I have to decide whether this is a business or home environment - Why? What do these options do? Why is there no explanation and when I select business I can't get shared folders working as easily as I could when I select Home. This needs a better explanation so I can make a better decision at that time I need to make the choice.
Also, why can't I select from a number of DNS providers? OpenDNS, Google's DNS servers, DynDNS etc.. the benefits of using these services should be for everyone, not just the people who know how to edit /etc/resolv.conf! I want a dropdownlist of some popular DNS services (or even the TOR network perhaps?) so anyone can choose which DNS servers to use, not just power users
- MSSQL - If anyone tells you MSSQL is far better than any other open source database engine, just ask them if it is possible to efficiently page data (limit/offset). If they know anything they will back down immediately. The GUI tools to configure MSSQL are fairly good quality though and are always preferable to non-standard RC scripts (see earlier comments)
- SSRS - Although it is faaaar better than Crystal Reports or the other Data Reporting products out there, SQL Server Reporting Services sucks. The markup is un-necessary, the scripting language is VB script and after a while the installation keys get screwed up and you have to re-initiate the system just for fun. The configuration tool is also confusing and non-standard, but we clearly need a good reporting solution built-in which third-party tools can make use of too
- Policy-based Access - I'm not talking about file system ACLs (though Windows sucks at that... 4 numbers is all you'll ever need for securing a file!) but SELinux is something that should be used. I'm sure a good GUI exists for this, I think it needs one as it is a very complicated creature and needs an easy way for beginners to start using it and not just disable it when it blocks them from doing something!
Other things that need to be included
For things like Event Viewer and Performance Monitor logging, and configuration in general could greatly benefit from a NoSQL database for storage. These can then be sharded or replicated amongst other servers in server production environments or accessed remotely in larger networks that have Sys Admins. Products like Hadoop could be used to sieve through this data (like Microsoft LogParser) but the actual storage doesn't need to be relational or with-schema, the speed and scalability benefits of NoSQL databases. The other obvious benefit of having things log to NoSQL databases is that if you're running this OS on Amazon AWS or other cloud computing environments (like Eucalyptus) you can configure the system to offload into the distributed databases offered by cloud computing; meaning you could aggregate all your servers' log files into a single location and Hadoop the sh*t out of it!!
This Linux distro also needs a modern, but classic desktop/window manager that is familiar yet cutting edge. I think the only contender here is cinnamon. I'm a massive fan on Unity, but I don't think it is right for servers or Enterprise environments. Just my opinion really.
So what do you think of my proposal? Has it all already been done and I'm re-inventing the wheel for a third time? Do you agree/disagree with what I've said? I'd really like to hear your opinions on this matter as it is something I've been thinking about for a while and might even be tempted to start coding up some prototypes. Are there any Java developers that fancy working on this? Anyone think of a good name for the distro? Answers on a postcard (or the comment form below if you prefer).
Thanks for taking the time to read this.