I’ve been working on a “Linux Inside Out” series and wrote a post that might interest folks here who like low(ish)-level / OS internals.

The idea is to dissect the components of a Linux OS, layer by layer, and build a mental model of how everything fits together through experiments.

The first part is about the kernel, in the post I:

  • take the same kernel image my distro boots from /boot
  • boot it directly with QEMU (no distro, no init system)
  • watch it panic
  • write a tiny Go program and use it as PID 1
  • build a minimal initramfs around it so the kernel can actually start our process

The goal isn’t to build a real distro, just to give a concrete mental model of:

  • that the Linux kernel is just a compressed file, you can boot it
  • without anything else
  • what the kernel actually does at boot
  • how it hands control to userspace
  • what PID 1 / init is in practice
  • what is kernel space vs user space

Link: https://serversfor.dev/linux-inside-out/the-linux-kernel-is-just-a-program/

I’m the author, would be happy to hear from other devs whether this way of explaining things makes sense, and what you’d add or change for future posts in the series.

Hope you find it useful.

  • DickFiasco@sh.itjust.works
    link
    fedilink
    arrow-up
    29
    ·
    edit-2
    19 hours ago

    Thank you, this is a great explanation. I look forward to the rest of this series.

    Edit: I successfully booted a Debian kernel using this tutorial, though I wrote the init program in C++ instead of Go. The process is pretty much the same, but you have to add the -static flag to g++ since the C runtime is not included in the initramfs. This might be obvious to more seasoned programmers but it took me a minute to figure it out.

  • lascapi@jlai.lu
    link
    fedilink
    arrow-up
    5
    arrow-down
    1
    ·
    16 hours ago

    That looks simple when someone (you) say it simply.

    Thank you for that. 😌

  • calliope@retrolemmy.com
    link
    fedilink
    arrow-up
    9
    ·
    19 hours ago

    This is very cool, thanks for sharing!

    I did a similar exercise a decade ago with HTTP and it was fun and eye-opening.

  • ambitiousslab@lemmy.ml
    link
    fedilink
    English
    arrow-up
    14
    ·
    edit-2
    22 hours ago

    It’s a very good explanation. I like that it is short and hands on. For me, it is pitched at the right level and the practical style keeps it very grounded.

    what you’d add or change for future posts in the series

    I wouldn’t change anything to do with the content! Speaking personally, I’m a fan of full text RSS feeds, so I’d love one on this blog if that’s an option :)

    • AWizard_ATrueStar@lemmy.world
      link
      fedilink
      arrow-up
      5
      ·
      22 hours ago

      I think there is one. All the way at the bottom of the page I see a link for RSS and I was able to add it to my RSS reader. It looks like everything is there unless I am missing something.

      • ambitiousslab@lemmy.ml
        link
        fedilink
        English
        arrow-up
        1
        ·
        15 hours ago

        I’m not sure if your RSS reader is getting the content through some special way. The feed itself only has the first two paragraphs:

        <item>
          <title>The Linux kernel is just a program</title>
          <link>https://serversfor.dev/linux-inside-out/the-linux-kernel-is-just-a-program/</link>
          <guid isPermaLink="true">https://serversfor.dev/linux-inside-out/the-linux-kernel-is-just-a-program/</guid>
          <description>Most books and courses introduce Linux through shell commands, leaving the kernel as a mysterious black box doing magic behind the scenes. In this post, we will run some experiments to demystify it: the Linux kernel is just a binary that you can build and run.</description>
          <pubDate>Mon, 01 Dec 2025 00:00:00 GMT</pubDate>
        </item>
        
    • zknd@lemmy.worldOP
      link
      fedilink
      arrow-up
      3
      ·
      22 hours ago

      Thank you for the feedback.

      Sure, I will look into the RSS plugin config. :)

  • harsh3466@lemmy.ml
    link
    fedilink
    arrow-up
    4
    arrow-down
    1
    ·
    20 hours ago

    This sounds awesome. I’m going to read this tomorrow when I can give it my full attention.