February 28, 2012

A Linux ready for Enterprise

  • 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!!

Window Manager

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.

Click Here!