Skip to main content

Posts

Showing posts from February, 2019

Windows Subsystem for Linux Internals

Background Windows Subsystem for Linux was developed by Microsoft to enable command line programs compiled for the Linux operating system to be executed on Windows. To explain the architecture I would like to show the evolution of OS design and how that has enabled this subsystem to be built. Dark Ages (or Back in the Day) Microsoft's MS-DOS was quite primitive in its design (compared to today's OS's). It is a single user OS that can execute one process at a time. DOS had an application programming interface to allow user programs to access some hardware in a device independent way, but only for character-based applications. This allowed applications to display graphical elements emulated with text characters as these screenshots of Microsoft word for DOS show: This is Microsoft Word version 1. To use these programs you had to remember key combinations to bring up the menus and used the cursor keys to navigate around the screen. If the a

What does "Full Stack" mean?

I've been a software engineer for a little while and I see the term "Full Stack developer" more and more, but what does it mean? Okay, let's walk through what a complete system will comprise of and see if we can work it out. UI First (from the users perspective) is the UI. It's how they interact and really all they care about (as long as the application does what is expected of it. Here is a list of some UI technologies that I know of AWT Swing Qt Android XML MFC and VB OpenGl Vulkan Communication Protocol Next up is the communications protocol (as most applications these days are a thin UI talking to a backend server (we've gone back to the mainframe era!) RPC FTP SNMP SMTP DDS ActiveMq/RabbitMq Network Layer The communications protocol has to be transported between the client and the server somehow, so here we have the network layer IPX/SPX Token Ring Bluetooth USB Server So now we have data being transferred between t