At a high level, it's because Atom is buult from components, and each of those components is made up of hundreds of components, and each of those is made from hundreds of components, etc. Each component is general-purpose in some way, and includes code that isn't used by Atom. To be slightly more specific, when I pull apart components like this to figure out why they're so large (like a 100MB XML-parsing library), the vast majority of the bulk is usually huge tables of data, such as unicode mappings. Most likely, Atom contains multiple components which contain the same data tables, but because of the hierarchical nature of modern software development, no one can cut through the layers and DRY up (denormalize?) that data.