Skip to content
HomeVideosBooksBlogs
AllTop postsTopics
Podcasts
HistoryListsWatch laterLiked videosFollowing

The videos, books, blogs and podcasts Hacker News keeps recommending, all in one place.

VideosBooksBlogsPodcastsAboutPrivacySettings

Data from Hacker News, HackerTube, HackerBooks, HackerBlogs and Open Library. Credits · Not affiliated with Y Combinator.

HomeVideosBooksBlogsPodcasts
Ctrl K
    E

    Evan Klitzke

    eklitzke.org · Personal blog · on HN since 2016

    Evan Klitzke writes about Linux internals and systems programming, including dd, linkers, stdout buffering, and uninterruptible sleep.

    Visit blogHN submissions
    Systems & PerformanceOpen Source & Linux
    What HN says

    HN links it for explanatory systems posts like "The cult of dd" and "PATH_MAX Is Tricky", and lists it among favorite personal blogs.

    Stats for nerds
    47HN people shared it
    96linked in comments
    2.9Kstory points
    Sep 2022last shared
    2017people per year2022

    Top posts on HN

    1. 1
      The cult of dd (2017)
      4 people · 558 points · first shared 2017 · 226 comments on HN
    2. 2
      Bash $* and $@ (2017)
      1 person · 316 points · first shared 2020 · 234 comments on HN
    3. 3
      How to Host Your Own Private Git Repositories
      1 person · 271 points · first shared 2017 · 108 comments on HN
    4. 4
      Lobotomizing Gnome
      3 people · 230 points · first shared 2018 · 221 comments on HN
    5. 5
      How Tail Call Optimization Works
      2 people · 221 points · first shared 2020 · 208 comments on HN
    6. 6
      In Defense of C++
      2 people · 198 points · first shared 2017 · 331 comments on HN
    7. 7
      Goroutines, Nonblocking I/O, and Memory Usage
      1 person · 182 points · first shared 2017 · 77 comments on HN
    8. 8
      Beware of strncpy and strncat
      1 person · 108 points · first shared 2018 · 169 comments on HN
    9. 9
      X86 Register Encoding
      1 person · 100 points · first shared 2016 · 51 comments on HN
    10. 10
      Efficient File Copying on Linux
      1 person · 95 points · first shared 2017 · 29 comments on HN

    What HN people wrote when they linked it

    • scottlambMar 2021

      And I find your comment to be a super-annoying combination of pedantic and mostly wrong. I'm not going to go through every example but just pick a few:

      > > For example, in C I'd be tempted to reuse a buffer allocated for one purpose for another purpose later (a technique known as HEARTBLEED).

      > You can do that in Java (with byte arrays) or in Common Lisp, so what is the point here? It is not practice in Java, Lisp nor in C and C++.

      C is a really old language with ancient libraries that are still widely used even though they are simply bad by modern standards. For that reason, I roll my eyes when people say something is not practice in C or talk about "sane" C libraries. A big part of working with C is dealing with ancient insanity.

      You can make much stronger statements about what is idiomatic in Rust (and to some extent Java) simply because it's newer and more cohesive.

      > > It's convenient to have fixed-size buffers for variable-size data (e.g. PATH_MAX) to avoid (re)allocation of growing buffers

      > This is because OS/Kernel/filesystem guarantee path max size.

      I think you've got that backwards. There's an advertised max path size because people wanted to stick paths in fixed-size buffers rather than deal with dynamic allocation. PATH_MAX is fairly arbitrary considering that there are certainly ways of creating and opening files which have paths exceeding that limit. I found this doc talking about this: https://eklitzke.org/path-max-is-tricky

      > printf is not shipped…

    • staticassertionSep 2022

      I believe that when a file is mmap'd a page table is created for it in the . As you perform read/write on the file a fault loads the actual entries into that page table. As pages can be mapped they so too can be unmapped under pressure, without that falling back to swap (since it is already a file backed map, you wouldn't swap a file backed map to a different file after all).

      There are a few relevant bits to this. You can MAP_POPULATE the file to prepopulate the entries and you can MAP_LOCKED to MAP_POPULATE + lock the pages in (unreliably). As mentioned in the man page for mmap MAP_LOCKED has some failure modes that you don't get with mlock.

      https://www.man7.org/linux/man-pages/man2/mmap.2.html

      I also found this page:
      https://eklitzke.org/mlock-and-mlockall

      Oh, and this: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_for_real_time/7/html/reference_guide/using_mlock_to_avoid_page_io

    • andythemoronJul 2017

      Julia Evans' blog is one of my favorites! It was a big inspiration for starting my own blog (https://andythemoron.com). I also love High Scalability and Dan Luu's blog which have been mentioned in other comments.

      I "follow" several which are mostly defunct, but in terms of blogs that still feature active updates:

      Evan Klitze's blog: lots of topics around Linux, C++, etc. https://eklitzke.org/

      Sutter's Mill: lots of "state of the world" for C++, but also context, history, etc. https://herbsutter.com/

      IT Hare: C++, game programming http://ithare.com/

      The Erlangelist: Erlang/Elixir http://theerlangelist.com/

      null program: lots of miscellaneous topics http://nullprogram.com/

      Fluent C++: the name speaks for itself http://www.fluentcpp.com/

      Another Programmer's Blog: Linux, C, C++, C#, MSSQL https://www.stev.org/

    • gcpFeb 2017

      Gah, another one of those promotional posts about Rust.

      More seriously, the large enough Noto Sans font with a hint of extra weight renders so gorgeous in Firefox (it's even bearable in Chrome!). I wish all webpages were as readable.

      As for the content, well, going back to: https://eklitzke.org/c++-java-go-and-rust I think the problem of the author is that he doesn't realize it's possible to do much better than C++. Claiming Rusts' ownership and borrow checking is exactly equivalent to std::unique_ptr or that Rusts' concurrency support is comparable to std::thread betrays very deep nativity, misunderstanding or just a mindset that can't see beyond what C++ offers.

    • chrsigNov 2021

      This is actually an incredibly frustrating thing -- when doing disk i/o, the process goes into an uninterruptible sleep state[0].

      So if your shell is doing some tab completion that goes into an uninterruptible sleep, there's no escape sequence you can send it to cancel that operation.

      Where I've seen this be the most vexing is in AWS if an EBS volume dies (surprisingly more frequent of an occurrence than you'd think!). It effectively prevents the machine from cleanly shutting down, and you wind up having to wait for the instance to be forcefully terminated.

      [0] https://eklitzke.org/uninterruptible-sleep

    • Artemis2Oct 2018

      Good addition! Here are some more:

      https://ferd.ca

      https://blog.filippo.io

      https://lethain.com

      http://movingpackets.net

      https://www.integralist.co.uk

      https://peter.bourgon.org/blog

      https://engineering.linkedin.com/blog

      https://begriffs.com

      https://mijailovic.net

      http://tatiyants.com

      http://blog.pentestbegins.com (seems down right now?)

      https://kalzumeus.com/archive

      http://blog.stephenwolfram.com

      https://paragonie.com/blog

      https://www.filfre.net

      https://brandur.org/articles

      http://archagon.net

      https://eklitzke.org

      I guess I could go on forever…

    Related

    Aphyraphyr.com551 people

    Hexing the technical interview (2017)

    Aphyr
    Personal · last shared 2026
    Chris Siebenmannutcc.utoronto.ca/~cks388 people

    Go is Google's language, not ours

    Chris Siebenmann
    Personal · last shared 2026
    Vidar Holenvidarholen.net68 people

    Useless Use of "dd" (2015)

    Vidar Holen
    Personal · last shared 2025
    Rachel Krollrachelbythebay.com493 people

    fork() can fail

    Rachel Kroll
    Personal · last shared 2026
    The Erlangelisttheerlangelist.com36 people

    Why Elixir (2014)

    The Erlangelist
    Personal · last shared 2026
    Dan Walshdanwalsh.livejournal.com24 people

    What does SELinux do to contain the the bash exploit?

    Dan Walsh
    Personal · last shared 2026
    Russ Coxresearch.swtch.com554 people

    Timeline of the xz open source attack

    Russ Cox
    Personal · last shared 2026
    Zwischenzugszwischenzugs.com66 people

    Things I Wish I'd Known About Bash

    Zwischenzugs
    Personal · last shared 2026