Singularity is a new OS from Microsoft Research written in Sing# (an extension of the C# Spec., almost all of the Singularity kernel is written in Sing# - (Bartok Compiler, with a small portion (around 5%) written in assembly and C++). Don't expect it to become a product from Microsoft, but I wouldn't be surprised to see this technology in some form showing up in future variations of their OS Products (such as MIDORI, or MinWin). It has many aspects that make it a very interesting Operating System.



  • A type-safe operating system, so no more blue screens.
  • No Shared Memory. They have implemented an approach called SIP, or Software Isolated Processes.
  • No dynamic code loading. OH MY - no more DLL's what will we do!!!!! Singularity does not use a CLR it has a highly optimized Bartok Compiler for the Sing# language bypassing MSIL and going straight to native machine code since there is no non-compiled, dynamically loaded code in the operating system.
  • Yes, written in C#, but since it is Microkernel based - a stripped down version - with many namespaces removed. SUCH as System.Windows.Forms (YES, it looks like DOS)
  • OS is based on a Micro-Kernel, and according to Galen Hall - they got around the issues of microkernel(see below) architecture because of type-safe foundation.

    Fifteen years ago, in 1992, two heavyweights in the field of operating system design were entangled in what would become a classic discussion on the fundamentals of kernel architecture (Abrahamsen (no date)). The heavyweights in question were Andrew S. Tanenbaum, the author of “Operating systems design and implementation” (Tanenbaum & Woodhull, 2006) and Linus Torvalds, the then-young and upcoming writer of what would become one of the most successful operating system kernels in computer history: the Linux kernel. Like most of his colleagues at that time, Tanenbaum was a proponent of the microkernel architecture, while Torvalds, more of a pragmatist than Tanenbaum, argued that the monolithic design made more sense. The discussion gained an extra dimension because of the fact that Torvalds had studied Tanenbaum’s book in great detail before he started writing the first version of the Linux kernel.
    In May 2006, Tanenbaum accidentally reignited the debate by publishing an article titled “Can we make operating systems reliable and secure?” (Tanenbaum et al., 2006). In this article, Tanenbaum, who had just released the third major revision of his microkernel-based operating system MINIX, argues that microkernels may be making a comeback. Torvalds replied on a public internet forum (Torvalds, 2006), putting forward the same arguments used 14 years earlier.
    In this article, I will try to make the ‘microkernel vs. monolithic kernel’ debate more accessible and understandable for laymen. I will explain the purpose of a kernel, after which I will detail the differences between the two competing designs1. Finally, I will introduce the hybrid design, which aims to combine the two. In the conclusion, I will argue that this hybrid design is the most common kernel type in the world of personal computers2 today.

    What is a kernel?
    Every operating system has a kernel. The task of an operating system’s kernel is to take care of the most basic of tasks a computer operating system must perform: assign hardware resources to software applications in order for them to complete the tasks the users want them to do. For instance, when you browse through the world wide web, your browser needs processor time to properly display the web pages, while also needing space on your hard drive to store commonly accessed information, such as login credentials or downloaded files. While it is the task of the operating system to properly spread the computer’s resources across running applications, it is the kernel that performs the actual act of assigning.
    You can compare it to a chef cooking a dish in a modern kitchen. The various ingredients (the computer applications) need to be prepared using kitchen appliances (the system resources) in order to form the dish (the operating system) after which this dish can be served to the people attending the dinner (the users). In this analogy, the chef is the kernel because he decides when the ingredients are put into the kitchen appliances, while the dish is the operating system because it depends on the dish which ingredients and kitchen appliances are needed. This analogy also stresses the symbiotic relationship between kernel and operating system: they are useless without each other. Without a recipe, a cook cannot prepare a dinner; similarly, a recipe without a cook will not magically prepare itself.

    Differences between kernel types
    An important aspect in operating system design is the distinction between ‘kernelspace’ and ‘userspace’. Processes (each computer program is a collection of processes) run in either kernelspace or userspace. A process running in kernelspace has direct access to hardware resources, while one running in user space needs to make a ‘system call’ in order to gain access to hardware (Cesati & Bovet, 2003). For instance, when you want to save a document in a word processor, the program makes a system call to that part of the kernel which manages hard drive access, after which this access is granted or denied (in other words, the document is stored on the hard drive or not). Because hardware can in fact be damaged by software, access to it is restricted in the above manner.

    In a monolithic design, every part of the kernel runs in kernelspace in the same address space. The definition of address space is beyond the scope of this article, but one consequence of all parts of the kernel running in the same address space is that if there is an error (‘bug’) somewhere in the kernel, it will have an effect on the entire address space; in other words, a bug in the subsystem that takes care of networking might crash the kernel as a whole, resulting in the user needing to reboot his system.

    There are two ways to solve this problem. The first of the two is to ‘simply’ try to keep the amount of bugs to a minimum. In fact, proponents of the monolithic design often argue that the design itself forces programmers to write cleaner code because the consequences of bugs can be devastating. The major problem to this approach is that writing bug-free code is considered to be impossible, and the 6 million lines of code in for example the monolithic Linux kernel allow for a large number of possible bugs.

    Microkernels approach the problem in a different manner in that they try to limit the amount of damage a bug can cause. They do this by moving parts of the kernel away from the dangerous kernelspace into userspace, where the parts run in isolated processes (so-called ‘servers’) which cannot communicate with each other without specific permission to do so; as a consequence, they do not influence each other’s functioning. The bug in the networking subsystem which crashed a monolithic kernel (in the above example) will have far less severe results in a microkernel design: the subsystem in question will crash, but all other subsystems will continue to function. In fact, many microkernel operating systems have a system in place which will automatically reload crashed servers.

    While this seems to be a very elegant design, it has two major downsides compared to monolithic kernels: added complexity and performance penalties.

    In a microkernel design, only a small subset of the tasks a monolithic kernel performs reside in kernelspace, while all other tasks live in userspace. Generally, the part residing in kernelspace (the actual ‘microkernel’) takes care of the communication between the servers running in userspace; this is called ‘inter-process communication (IPC)’3. These servers provide functionality such as sound, display, disk access, networking, and so on.

    This scheme adds a lot of complexity to the overall system. A good analogy (Microkernels: augmented criticism (no date)) is to take a piece of beef (the monolithic kernel), chop it into small parts (the servers), put each of those parts into hygienic plastic bags (the isolation), and then link the individual bags to one another with strings (the IPC). The total weight of the end result will be that of the original beef, plus that of the plastic bags and string. Therefore, while a microkernel may appear simple on a very local level, at a global level it will be much more complex than a similar monolithic kernel.

    This complexity also creates performance issues (Chen & Bershad, 1994). Simply put, the communication between the servers of a microkernel takes time. In a monolithic design, this communication is not needed as all the servers are tied into one big piece of computer code, instead of several different pieces. The result is that a monolithic kernel will generally out perform a microkernel (provided they are similar feature-wise). This explains why Torvalds chose to write Linux in a monolithic fashion; in the early ‘90s, computer resources were much more limited than they are today, and hence anything that could increase performance was a welcome addition.

    As an answer to these concerns, a new type of kernel design was devised. This design combines the monolithic and microkernel design in that it has characteristics of both. It keeps some subsystems in kernelspace to increase performance, while keeping others out of kernelspace to improve stability. That part of a hybrid kernel running in kernelspace is in fact structured as if it were a microkernel; as a consequence, parts which run in kernelspace can actually be ‘moved out’ of it to userspace relatively easily. Microsoft Corp. has recently demonstrated this flexibility by moving large parts of its audio subsystem in the Windows operating system from kernelspace to userspace (Torre, 2005).

    The hybrid design has been heavily criticised. Torvalds (2006) and Rao (2006) said the term hybrid was devised only for marketing reasons, while Mikov (2006) argues that the fact that hybrid kernels have large parts running in kernelspace outweighs the fact that it is structured as a microkernel.

    I disagree with these criticisms on the basis that if system C combines aspects of both systems A and B, it is a hybrid of those two systems. As an analogy, consider the mule (the offspring of a female horse and a male ass). The mule carries characteristics of both an ass as well as a horse, and hence it is classified as a ‘hybrid’.

RDK is available at CodePlex?  Well it is - that is a working version of the OS.  (Requires Virtual PC2007 or - from the manual:

"If you want to boot Singularity onto a physical PC, you need a PC with at least 512MB of RAM and a Pentium II or later processor. If you want to pursue this, please contact singrdkq@microsoft.com for more information." HA HA HA)

This is it booting...



Check out this interview of Jim Larus and Galen Hall the architects of this OS.

Singularity: A research OS written in C#


Great Strategic Move....Bill, or should I Blame BALLMER NOW?

In their ever ongoing quest to dominate the world, after all they have tried a lot of different approaches..., this last move has me busting out laughing!

Lets do this stepwise, at least as far as I can tell, because - I am like still recovering.

To set some foundation

I do consider what Bill Gates achieved in his life amazing, and I do love their products.  My Java and Unix friends are like cringing, and I can hear them now talking about that great Windows stability as a server...well, I am not an admin so I cannot debate that.  I have had numerous blog-sites, mostly with Google (dotNET-Jeff) - and now I have another with Microsoft (jeffHAMLIN@dotNET) (not comment, I mean if you gotta understand this madness read the post at the other blog LOL).

In addition to this, I have Microsoft's - another dotNET@JEff - (I am seeing a definite, and repeating pattern along with some lacking creativity) version of MySpace (a place I just never got in the groove of, but created a site World of Warcraft - MySpace site for my HORDE toon warrior KAHLESS  ...my guild kind of lived out there...I even made a punk-ass Alliance named Agamenon!!.  But, I haven't had time for WoW, just been focused on work - and if I can, coding at CodePlex - so that MySpace site is probably dead.

I was tired, it was late, they asked at a moment of severe weakness...

To top it off, I am starting all over making contacts!!  No one knows me anymore!  ACK!

Back to the issue! [Coming totally clean, my first blog was at my domain, during the upgrade to all new software - it took like a year, they wiped out the database WordPress database, so Google rescued me - with a pretty cool blog that was nice for social discussions  JBH.blogger.]

OK.  All distractions set aside.  But you have a basic picture.  Since it is apparent I have tried at least 3 different WEB or Client-Side Blog Editing WYSIWG environments.  Maybe I am slow, but - I HATE GOOGLES.  They get everything else right, but that WYSIWG - (a few choice words come to mind, serious expletives for a simple process....).


Write the post, and maybe change the font for emphasis - or to go to a mono-spacing because the presentation type requires it  (data from a CSV export).  You want it to line up nicely without creating a table. 

  1. Courier New
  2. Microsoft Sans Serif
  3. Fixedsys
  4. Lucida Console (I love it, my boss hates it...)
  5. Fruitger SAIN Rm    (not sure if it is - but is smooth in the IDE)

In Google (Blogger), the <div would constantly loose it's place - or the <font tag.  This would cause the formats to scramble and you might see a header with mixed fonts, and sizes.  Or even colors.  No problem, edit the HTML (that is the fun part), but the moment you past it back into their editor - it is reformatted and inconsistent formats. 


Google (Known Issues for Blogger) knew they had a problem, they made a newer WYSIWG, and I wasn't satisfied. 

In the beginning of the browser wars, I loved IE, but today...it is a resource consuming, unreliable, hogster!  I use FORFOX constantly, and sometimes Opera ( to simulate IE if possible, or even - Mozilla SeaMonkey (PROJECT - Browser), but IE - well its a work requirement for some sites in the DoD!!!)  I gave Apple Safari a chance, but on three different computers - it was a bad experience - only seems good on my MAC!

But FireFox 3 (oh so sweet) has all these really cool FireFox Add-ons, and one I did really like was ScribeFire.  It integrates into the browser, and works like Windows Live Writer -  for what to - seemed to be any site, but - even ScribeFire's beautiful rendering was ruined by the Google (Blogger) WYSIWG - (is it movable type - did I miss a setting?).

Microsoft and Bill...er...BALLMER to the Rescue!!!

Amazing GATES WALKS AWAY.  I guess no more hurdles....


Along comes my new MSDN.Microsoft toys, me up all night on Charlie Calvert or the VSX Team blogs  (these blogs by the DOC_EX are so cool(very understanding wife), and updating my SDK's, my XNA 2.0, WiX, everything I needed (some I will not be able to use at work, but not gonna stop me!!!) - I realize my Messenger/Outlook need update and get them ASAP,  That opens the door to my dotNET-Jeff (1st MS one) blog.

Unfortunately for some Software VENDOR - who I will not name (INTERNET FIREWALL EDITION - Like MS-Office, a new one EACH YEAR with THE YEAR ON IT...*HINT*) - It had caught me at a VERY bad time of trying to do some development, and hunting down a Package in VS2005 that didn't exist, but was crashing the IDE....2-days of registry ...torture.  Fighting off their little service who - no matter what I set in the SCM, would startup (internal firewall) and make the situation far worse!

So, my first post at the site was about SECURITY SOFTWARE and how it interferes with the DEV environment [if my boss saw this he would bust out laughing] - trashing ***$$$&*((*Y(and dumping my 168 days of remaining subscription ...or thereabouts...)

With this new "space" comes a very cool client side blogger - incorporating the new Live email, some "Office" technology and nice expandability.  It is Windows Live Writer.  I am STOKED!!  It creates a really cool site at the spaces, so I try it at the dotNET-Jeff from Google, and it seems to work no problem!  In addition, this tool is DESIGNED for CODERS...it has features for us to publish source code built in out of the box.

All those mundane articles I have shelved..awaiting approval from my boss (I work in a place where knowledge is protected, I am not such an asset - but I guess, ya know - there are processes to be followed!!)  Approval from him...he recalls the abacus....

After Over A Month of Waiting...I Get The Email "Hello and welcome to the WindowsClient.Net blogging community..."

Cool, the Community Server based system.  It - has a decent WYSIWG, but now I have been spoiled.  So, I try to use Windows Live Writer the MICROSOFT BLOGGING CLIENT for My MICROSOFT BLOGSITE!

The one they are stressing for all the developers.  The very same you see most of Microsoft's own people using who post tons of knowledge on.

Windows Live Writer - doesn't work for blogs.windowsclient.net

At first, I think "I just cannot find the setting for remote URL posting" - when I Google the query, I am amazed to see that people are still waiting for this natural integration.  There is one post about a 13 step procedure (I never did find) to integrate them - if you use a component!

This is just too funny. 

I am like the only .NET developer on the project, the rest are hard core Java, and I am medium core on Java (just never appealed - toolset was crappy and JVM varied from OEM to OEM - IBM for example - but I do love ECLIPSE!) - I am definitely hardcore on the .NET architecture and tools.  I can cite example after example of how seamlessly MS devtools integrate while Java - is a serious pain!!

Now this...

Great move Steve!!!


First OpenSource Project Up! Work Starts.

Hello, this is the 3rd time I write this post.

Now, why your asking is this the 3rd time?
Because I don't have much luck with blog editors! Especially
Google's, that is why I am now using their new improved one. I just hope it doesn't mess up my formatting again. All I want to do is write, compose and post! But this is a serious struggle.

This time I am using ScribeFire. An Add-on that is integrated into my FireFox browser. It is VERY cool. I MEAN AWESOME! I can even size it to my 22' screen! Google doesn't miss the boat on too many thins, but here, well it sailed.
Now on to the post.  -

P.S.  - Post, action Post Update

While ScribeFire was excellent for me managing, creating, and posting - my little evil friend at Google somehow managed to mangle the nice presentation... I simply grabbed the text, placed <font> tags at beginning, and end, with a few <a hrefs...>, inserted the tag for the <image> and called it quits....UNCLE I said..


Its about my first Open Source project I just posted a CodePlex.

"CodePlex is Microsoft's open source project hosting web site."

A definition of the service from the CodePlex team. Since I am focused on the .NET programmer (do other non- - it made sense for me to try my first open source project here instead of SourceForge.NET.

So I had to pick a project. Well I was working on developing all kinds of IDE Add In's for work and home. Integrated source reflectors, automated solution backup - based on ZipStudio [Upgraded ZipStudio source is at "Willem Rue" Blogz, a NICE Add-In that really helped me a lot once I automated the backup process at the project level], and some others. The same things I see out here now.

I had already developed a version of SQLString as task tray application, and was using it - but this was an opportunity to re-develop the idea and take it much further, and at the same time learn a brand new (for me) namespace (was NOT going back to do the Compact one!!).


What is SQLString?

So, this project - SQLString what is it?

SQLString is a simple SQL code generator that works within the Visual Studio 2005/2008 IDE. I had used a SQL code generator many years ago years ago and loved it.  I knew it could help me now,  but could never find it except in websites. Where I work - access to the web isn't reliable, or fast so I made my own. (NOTE to boss, this version, I made at home - off the clock).

The initial requirements were simple enough, but they grew. I couldn't make a version 2 without some serious enhancements!

Functional Requirements (blah blah blah - ode to a friend)
  1. Allow the user to either paste or have linked into the control a specific SQL statement.
  2. Select a target language and based on the language chosen, allow the user to select from a pre-defined list of data types compatible with the selected language (I am NOT a functional, but many friends are!!!)
  3. Enable the user to select a customizable template, or additional "header" and "footer" snippets (Visual Studio 2005 Code Snippets for example...).  [Best example I could come up with]
  4. Generate a source code statement which is compatible with the selected language.

    Base User Parameters related to SQL Code Generation

    1. Default the generated statement into a standard variable or allow the user to define a variable. 
    2. Define the "wrap" point for the characters in the generated statement. Default is 80, which currently means if a WORD will cause the generated string to exceed that parameter it will be wrapped to the next line. 
    3. Enable the generated SQL statement to be:

  • 1. Allow the user to insert the generated statement into the current IDE document at :

  • this.ApplicationObject.ActiveDocument.Object("TextDocument") as TextDocument;

  • 2. Enable the user to save the results into both the CODEKeep Library and XML Files.   CODEKeep (my current customers would recognize) is a place to store the generated SQL/Program Logic.  Like a storage for it - permanently, but with the ability to generate daily changes to the db and export them as XML or - whatever.

I know, wild!! I even went to Microsoft Research to check on the other language they have released for the IDE named F#. If it will be in the IDE, I was going to support it.


I know which project I will submit to CodePlex, just need to make sure I have it documented enough for them. The few options that CodePlex presents in the beginning for a new project are:

  1. Name
  2. Description (up to 2000 chars, but only the first 190 can be seen - DUH!!)
  3. URL.
  4. Email verification.


Glad I was prepared.

Of course I may have gone overboard for a simple SQL Code Generator, but I like to have more documentation than too little. After your project is created, now you must provide details.

Project Description

Here you provide more detail on what the project is, and does. But now the fun begins because who wants to provide such information to the world in plain text, when there is a nice markup language available? So, now you have to learn that! Not a problem, but I couldn't figure out how to set an external URL to have a nice name IBM like instead of showing www.ibm.com.

I lost a lot of time playing with that trying various permutations on their URL command like:

[url:www.ibm.com]IBM and [url:www.ibm.com , title=IBM],and several others. None of which worked (CodePlex is new, so I am patient).

Doing a list or table was so easy, I almost abused it. I then provided some screenshots so users would have context. Meanwhile there is this enormous message in big red letters reminding me that I had


That is motivating!! I can understand though. Disk is expensive!! (Well until I walked into Best Buy last week and saw 1TB external USB drives on sale for 199!!! - I am running out of ports).

Add Team Members

This was a one man show. If someone wants to help, no problem! But no one to define.

Upload Source

Now, this is where the fun begins. CodePlex offers many source code control tools to integrate with, from Team Explorer Client (Microsoft Solution) to TortoiseSVN. I had already narrowed my choices to TortoiseSVN or to the CodePlex Client - a command line based utility which had directly interface to the TFS servers at CodePlex.

Since I had not used any Subversion based tools, I felt more comfortable with the CodePlex Client. I still have to get TortoiseSVN for work!!

Now there is a nice configuration file to which must be created, with some documentation (minimal at best). The moment I added in the parameters for my Diff and Merge tools, it thew exceptions. With no handler, to get any reason why.

Note to self:
Next time you have this situation and the source code and an ERROR - fix it.  I mean, I had the code, I knew the language, I could do what was needed to fix it..but I was thinking in the box....DUH!!

So I start taking out the parameters one by one. Eventually - it comes back to a working state when there are virtually NO PARAMETERS!

(What I learn through much trial and error is that I should wait to establish comm from my system to CodePlex servers with the Client - BEFORE setting the SourceGear or TortoiseMerge/Diff tool parameters...)

Fine, so, now I need to:check-in my project for the first time!

But there is no such command in the CodePlex Client. OK, fine, I try add - but that is to add files/directories after they are checked out- DUH!?

Now, remember - I have NO project files on their server. I search thru the Wiki and find some answer...

cpc checkout [projectname]

Which is so logical!

This I learn from someone who stayed up very late trying to use the CodePlex Client - and he was kind enough to post his notations into the Wiki.

Eventually - I get the project uploaded.

Select A License

I thought I might select the GNU license, but I went around and looked at a lot of the licenses other projects had, and was surprised in the variety. When researching the Open Source Foundation, they had so many licenses, even NASA had an open source license - I just went and decided to use the Microsoft one. No particular reason why, just hope they don't get any rights because of it!

Update the Issues

There were several. I think the most critical being the data model is still in flux.

Create A Release

Now this was interesting. I had already created the base set of files when I uploaded changeset 19719. But for a Release, it did not draw from what was checked into the repository but required I upload files from my local file system - again.

Along with each file - provide a description. I created the Alpha Release 001 and placed it into PLANNED status.

CodePlex gives you several statuses for a Release

(Which we may review for adoption on my current project)

  1. Alpha—the first feature-complete build of the software that is ready for testing. Some developers may also use the term "Alpha” for software with limited functionality.
  2. Beta—a feature-complete build of the software that has passed system and regression testing.
  3. Nightly Build—as implied, a build of the software generated after the developers have completed their work for the day. This is often an automated build.
  4. Production—the final release to be delivered to the end users.
  5. Release Candidate—a build of the software that is potentially ready for final release to the end user, barring any “show-stopping” issues that come to light.
  6. Special Build—a software build that is generated for any particular reason, often at the request of a project member or members.

Now update the "tags" that I think should be used as part of a search in order for people to find my project. I select several, from .NET 2.0 to Java/J#.

Status Check

OK, I have made the new project - provided detailed information on it's design, uploaded the files, selected a license, identified issues, created a release - OH yes - PUBLISH IT!!!

There is still more to do,

Add News Feeds and but the most difficult part for me...

After You Publish Your Project, Increase Traffic and Evangelize Your Project

I was never a salesman!! But we shall see how it goes.

Now work Begins!!

Oh, and this is a screenshot of SQLString in action!!