A detailed breakdown of the fundamental differences between true Dependency Injection frameworks (Metro, Dagger, Hilt, kotlin-inject) and Service Locators (Koin, Kodein, Compose composition locals). True DI frameworks offer compile-time graph validation, better testability, and generated performant code at the cost of build time and explicitness. Service locators prioritize developer ergonomics and faster builds but risk runtime failures and harder isolation testing. The post also clarifies a common misconception: Koin's KSP/compiler plugin does linting-style validation, not true compile-time DI graph construction. The author traces the evolution of Kotlin DI frameworks from Guice through Dagger to Metro, and concludes that the best framework is the one that fits your team's risk tolerance and requirements — not necessarily the newest one.