Why is Hello World 4MB?

Another way to look at it is that a "Hello World" from C is 10MB in size, but 9.99MB of that is shipped with your operating system.

For example on macOS a C hello world program links with all these libraries:

otool -L a.out
a.out:
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.0.0)
/usr/lib/libSystem.B.dylib:
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.0.0)
	/usr/lib/system/libcache.dylib (compatibility version 1.0.0, current version 80.0.0)
	/usr/lib/system/libcommonCrypto.dylib (compatibility version 1.0.0, current version 60118.30.2)
	/usr/lib/system/libcompiler_rt.dylib (compatibility version 1.0.0, current version 62.0.0)
	/usr/lib/system/libcopyfile.dylib (compatibility version 1.0.0, current version 1.0.0)
	/usr/lib/system/libcorecrypto.dylib (compatibility version 1.0.0, current version 562.30.10)
	/usr/lib/system/libdispatch.dylib (compatibility version 1.0.0, current version 913.30.4)
	/usr/lib/system/libdyld.dylib (compatibility version 1.0.0, current version 519.2.2)
	/usr/lib/system/libkeymgr.dylib (compatibility version 1.0.0, current version 28.0.0)
	/usr/lib/system/liblaunch.dylib (compatibility version 1.0.0, current version 1205.30.29)
	/usr/lib/system/libmacho.dylib (compatibility version 1.0.0, current version 900.0.1)
	/usr/lib/system/libquarantine.dylib (compatibility version 1.0.0, current version 86.0.0)
	/usr/lib/system/libremovefile.dylib (compatibility version 1.0.0, current version 45.0.0)
	/usr/lib/system/libsystem_asl.dylib (compatibility version 1.0.0, current version 356.1.1)
	/usr/lib/system/libsystem_blocks.dylib (compatibility version 1.0.0, current version 67.0.0)
	/usr/lib/system/libsystem_c.dylib (compatibility version 1.0.0, current version 1244.30.3)
	/usr/lib/system/libsystem_configuration.dylib (compatibility version 1.0.0, current version 963.30.1)
	/usr/lib/system/libsystem_coreservices.dylib (compatibility version 1.0.0, current version 51.0.0)
	/usr/lib/system/libsystem_darwin.dylib (compatibility version 1.0.0, current version 1.0.0)
	/usr/lib/system/libsystem_dnssd.dylib (compatibility version 1.0.0, current version 878.30.4)
	/usr/lib/system/libsystem_info.dylib (compatibility version 1.0.0, current version 1.0.0)
	/usr/lib/system/libsystem_m.dylib (compatibility version 1.0.0, current version 3146.0.0)
	/usr/lib/system/libsystem_malloc.dylib (compatibility version 1.0.0, current version 140.1.1)
	/usr/lib/system/libsystem_network.dylib (compatibility version 1.0.0, current version 1.0.0)
	/usr/lib/system/libsystem_networkextension.dylib (compatibility version 1.0.0, current version 1.0.0)
	/usr/lib/system/libsystem_notify.dylib (compatibility version 1.0.0, current version 172.0.0)
	/usr/lib/system/libsystem_sandbox.dylib (compatibility version 1.0.0, current version 765.30.4)
	/usr/lib/system/libsystem_secinit.dylib (compatibility version 1.0.0, current version 30.0.0)
	/usr/lib/system/libsystem_kernel.dylib (compatibility version 1.0.0, current version 4570.31.3)
	/usr/lib/system/libsystem_platform.dylib (compatibility version 1.0.0, current version 161.20.1)
	/usr/lib/system/libsystem_pthread.dylib (compatibility version 1.0.0, current version 301.30.1)
	/usr/lib/system/libsystem_symptoms.dylib (compatibility version 1.0.0, current version 1.0.0)
	/usr/lib/system/libsystem_trace.dylib (compatibility version 1.0.0, current version 829.30.14)
	/usr/lib/system/libunwind.dylib (compatibility version 1.0.0, current version 35.3.0)
	/usr/lib/system/libxpc.dylib (compatibility version 1.0.0, current version 1205.30.29)
4 Likes