Hacker News new | past | comments | ask | show | jobs | submit login

I used to use this in the days of XP. It was an amazing way to learn Linux without losing Windows for me. I was sad when I had to move on without it due to the limitations of 32bit and 4GB of RAM (of which I could only actually use 3.2GB of at the time). Strange that this abandoned relic of a time long past showed up here in HN.



My story with coLinux was that it was also my first experience with Linux, also around 2008. I wanted to try it but the thought of installing it and dual booting seemed a bit scary to me, so when I came upon a solution that supposedly let me run Linux and Windows at the same time, I was thrilled. However, since I was very young and knew nothing about Linux or even computers in general, I never managed to actually run any Linux programs with it. I don't remember if I just didn't install a disk image with a distribution on it or what, but since I didn't get it to work, I assumed that it was some sketchy project that amounted to snake oil.

Fast forward to earlier today, after using Linux (proper) for the past 12 years, I came across another comment on HN that mentioned it and realized that even today I didn't really understand how the promises of coLinux were possible - how can you run Linux and Windows at the same time? Was it some kind of userland virtualization, like Wine, or was it just a fancy virtual machine, or what? After reading about it I realized it was in fact a very real project that actually did work, and that it used a very novel method of running two operating systems together without "virtualization" as people typically know it, where there is a "host" and a "guest" separated by hardware isolation mechanisms.

Instead, it works by literally just running the Linux kernel inside of a Windows driver, with some bootstrapping code to allocate memory to it, some glue for Windows/Linux context switching (with control yielding from Linux to Windows after a time slice, and control passing from Windows to Linux via a userland daemon in Windows calling into the coLinux driver on a timer), and a mechanism for ferrying interrupts between the two kernels. This basically amounts to "cooperative multitasking", which hadn't really been a thing since segmentation and paging were introduced at least as far back as the early 90's, and as far as I'm aware hasn't been used as a technique for serious virtualization since (for probably the obvious reasons).

It was pretty fascinating learning that this thing I'd tried so many years ago (and hadn't managed to get working, sadly) had such a novel approach to virtualization, so I thought it was interesting enough to share here.




Consider applying for YC's Summer 2025 batch! Applications are open till May 13

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: