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 Martin

    neugierig.org · Personal blog · on HN since 2007

    Evan Martin, an early Chrome developer and creator of the Ninja build system, writes about build tools, Chromium, and software complexity.

    Visit blogRSSHN submissions
    ProgrammingSystems & PerformanceOpen Source & Linux
    What HN says

    Commenters praise Ninja as simple and reliable, link his retrospective and complexity posts, and cite his notes on Chrome and the Iron fork.

    Stats for nerds
    125HN people shared it
    139linked in comments
    3.9Kstory points
    Aug 2026last shared
    2011people per year2026

    Top posts on HN

    1. 1
      TypeScript at Google
      3 people · 554 points · first shared 2018 · 195 comments on HN
    2. 2
      The success and failure of Ninja (2020)
      6 people · 507 points · first shared 2020 · 82 comments on HN
    3. 3
      Leaving Google
      2 people · 481 points · first shared 2021 · 302 comments on HN
    4. 4
      Why Not Haskell?
      2 people · 202 points · first shared 2011 · 130 comments on HN
    5. 5
      Retrowin32, a Win32 emulator
      1 person · 196 points · first shared 2022 · 60 comments on HN
    6. 6
      Notes on WebAssembly
      1 person · 158 points · first shared 2022 · 56 comments on HN
    7. 7
      The Jujutsu version control system
      5 people · 157 points · first shared 2024 · 50 comments on HN
    8. 8
      Chromium Notes: Ninja, a new build system
      6 people · 131 points · first shared 2011 · 44 comments on HN
    9. 9
      React, JSX, and CoffeeScript
      2 people · 124 points · first shared 2014 · 69 comments on HN
    10. 10
      Complexity is the enemy
      5 people · 121 points · first shared 2011 · 26 comments on HN

    What HN people wrote when they linked it

    • ctvoSep 2021

      > Also, I see you amended your original comment with a jab against me for the type keys post.

      I didn't realize you were the same person who wrote that blog post, and I edited it to include it when I realized. I linked your amended version, not your initial version if that's of any worth.

      And you're correct it's not closed. I still stand by that particular proposal is going nowhere. You can make any proposal you want. It hasn't even moved to the design stage yet in 3 years, so I'm not sure why it's something you hang on to as a signal error handling is changing. Take generics for example, and the years (decade) of work that it took.

      This is unsolicited blog feedback:

      Your blog and writing style doesn't read like it comes from a place of humility and learning, but from a place of authority. Sometimes that's OK, but in your case, feels unwarranted. And the constant push to get it on to HN or Reddit or N other platforms so it can spread... Thought leadership as an aspirational goal has never been something I look for in blogs I read (I recoil and go elsewhere when I sense this is the goal).

      I understand it's hard work, and you want others to see it, but just someone else's perspective.

      Some blogs that I really enjoy (and I hope others emulate so I'm sharing):

      - http://neugierig.org/software/blog/

      - https://brooker.co.za/blog/

    • mort96Sep 2022

      This comment (https://news.ycombinator.com/item?id=32702062#32703005) from this thread links to this post: https://neugierig.org/software/chromium/notes/2011/08/zygote.html

      TL;DR: right after launch, Chrome forks off a helper process which is then responsible for forking off child processes, so that all child processes use the same process image as the main Chrome process. It also opens all files it will need right after launch and just re-uses the same file descriptors, so it always keeps references to the old files. This is complicated and brittle and a source of bugs, but when everything works and nobody makes a mistake, it means the old Chrome can keep running without problems even after all its files have been replaced with those from a new Chrome.

      At least that's how it worked in 2011 according to Evan Martin.

    • stuhoodSep 2020

      Great post.

      A point that neither this article nor the recent ninja retrospective (http://neugierig.org/software/blog/2020/05/ninja.html) touch on though is that hashing of files is an important step if you'd like to keep caches locally, but especially if you'd like to keep caches remotely.

      A key reason that Bazel-alikes (including http://www.pantsbuild.org, which I work on) hash things is for use in cache keys. And many of those systems use file watching facilities (notify, fsevents) to determine whether files need to be rehashed. If done properly (i.e.: no false negatives), this is significantly faster than checking file mtimes, and it allows for "early cutoff", where if after hashing the digest of a file has not actually changed, you can skip rebuilding its dependents.

    • cairo140Jul 2021

      There's no secret sauce. The typical aphorisms of software development are generally correct and apply here:

      * internalize the cost of core changes and don't push them downstream unless you have a really good reason
      * staff a core team to take care of high ROI horizontal efforts that have high fixed cost to do efficiently, e.g. TypeScript migration of a massive codebase
      * be careful of what you take on
      * complexity and code are costs and not end goals

      Reading them is one thing but seeing the principles play out in detail amidst the mess of reality was illuminating for me. The author's blog[1] touches on these themes a bit more and I think are a good glimpse into their stewardship of the TS/JS codebase.

      [1] - http://neugierig.org/software/blog/

    • krytenJul 2013

      That assumption relies on two uncertainties:

      1. The probability of discovering something in all that binary code, especially with the intricate and non-orthogonal nature of x86/x64 assembly and odd compiler optimisations. This isn't some 80's game.

      A comparison:

      28500000 = Chrome binary size [1]
      750000000 = Human Genome size (converted to bytes - 1BP = 2bits so 4BP per byte) [2]

      So we're only 26x more complicated than Chrome and we have absolutely no fucking idea what is going on with us most of the time.

      2. The probability of a vulnerability being published to Google versus selling it on the private market.

      [1] http://neugierig.org/software/chromium/bloat/

      [2] http://www.biostars.org/p/5514/

    • gstJan 2017

      In general I agree. My only current exception is that I use Brave[1] instead of Chrome on Android, because Chrome is missing adblocking. It appears that the company behind Brave is large enough to keep the fork somewhat up to date (compared with several other forks that are only updated very infrequently).

      Also not only security updates are an issue. Some of the previous forks have been maintained by people who hardly had any idea of what they were doing. Interesting blog post about the Iron fork: http://neugierig.org/software/chromium/notes/2009/12/iron.html

      [1] https://en.wikipedia.org/wiki/Brave_(web_browser)

    Related

    Bret Victorworrydream.com936 people

    A brief rant on the future of interaction design (2011)

    Bret Victor
    Personal · last shared 2026
    Brendan Eichbrendaneich.com173 people

    From Asm.js to WebAssembly

    Brendan Eich
    Personal · last shared 2026
    Christian Tietzechristiantietze.de17 people

    Atkinson Hyperlegible Font

    Christian Tietze
    Personal · last shared 2026
    Joel on Softwarejoelonsoftware.com2.8k people

    Victory Lap for Ask Patents

    Joel on Software
    Personal · last shared 2026
    Joseph Gentlejosephg.com100 people

    Electron is flash for the desktop (2016)

    Joseph Gentle
    Personal · last shared 2026
    Nibble Stewnibblestew.blogspot.com74 people

    Apple of 2019 is the Linux of 2000

    Nibble Stew
    Personal · last shared 2026
    Shopify Engineeringshopify.engineering268 people

    Building all of our new mobile apps using React Native

    Shopify Engineering
    Company · last shared 2026
    Brian Andersonbrson.github.io32 people

    Dave Herman’s contributions to Rust

    Brian Anderson
    Personal · last shared 2025