The term "leaky abstraction" was popularized in 2002 by Joel Spolsky.34 A 1992 paper by Kiczales describes some of the issues with imperfect abstractions and presents a potential solution to the problem by allowing for the customization of the abstraction itself.5
As systems become more complex, software developers must rely upon more abstractions. Each abstraction tries to hide complexity, letting a developer write software that "handles" the many variations of modern computing.
However, this law claims that developers of reliable software must learn the abstraction's underlying details anyway.
Spolsky's article cites many examples of leaky abstractions that create problems for software development:
In 2020, Massachusetts Institute of Technology computing science teaching staff Anish, Jose, and Jon argued that the command line interface for git is a leaky abstraction, in which the underlying "beautiful design" of the git data model needs to be understood for effective usage of git.6
Seibel, Peter (1 November 2006). Practical Common Lisp. Apress. p. 96. ISBN 978-1-4302-0017-8. 978-1-4302-0017-8 ↩
Spolsky, Joel (2002). "The Law of Leaky Abstractions". Retrieved 2010-09-22. https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/ ↩
arvindpdmn (2019-08-23). "Leaky Abstractions". Devopedia. Retrieved 2020-07-07. https://devopedia.org/leaky-abstractions ↩
Kiczales, Gregor (1992). "Towards a New Model of Abstraction in the Engineering of Software" (PDF). Archived from the original (PDF) on 2011-06-04. Retrieved 2010-02-03. https://web.archive.org/web/20110604013045/http://www2.parc.com/csl/groups/sda/publications/papers/Kiczales-IMSA92/for-web.pdf ↩
"Version Control (Git)". the missing semester of your cs education. Retrieved 2020-07-31. https://missing.csail.mit.edu/2020/version-control/ ↩