Unix, Plan 9 and the Lurking Smalltalk

  • Stephen Kell
Part of the Philosophical Studies Series book series (PSSP, volume 133)


High-level programming languages and their virtual machines have long aspired to erase operating systems from view. Starting from Dan Ingalls’ Smalltalk-inspired position that “an operating system is a collection of things that don’t fit inside a language; there shouldn’t be one”, I contrast the ambitions and trajectories of Smalltalk with those of Unix and its descendents, exploring why Ingalls’s vision appears not (yet) to have materialised. Firstly, I trace the trajectory of Unix’s “file” abstraction into Plan 9 and beyond, noting how its logical extrapolation suggests a surprisingly Smalltalk-like end-point. Secondly, I note how various reflection and debugging features of Smalltalk have many analogues in the fragmented world of Unix programming. Finally, I consider how these two directions of change may yet be convergent within future Unix-derived systems, and what this might mean for programming languages.


Unix Smalltalk Plan 9 Metasystem Composition Binding Integration Virtual machines Reflection Debugging 



I thank Michael Haupt for provoking me into writing on this topic. This version has been improved by a host of helpful comments over several years, notably from Michael Haupt, Peter Kessler, David Leibs, Mario Wolczko, the participants and anonymous reviewers of the Programming Languages and Operating Systems workshop at SOSP 2013, the audience at Carnegie Mellon University during a November 2013 talk, the anonymous reviewers of Onward! at SPLASH 2015, the anonymous reviewers of the History and Philosophy of Programming Conference 2016, the anonymous reviewers of this publication, and the countless other people I’m forgetting who have indulged my opinions and arguments on this topic. Sections 6.2, 6.7 and the preparation of the overall manuscript were supported by EPSRC Programme Grant ‘REMS: Rigorous Engineering for Mainstream Systems’, EP/K008528/1.


  1. Aldrich, J. 2013. The power of interoperability: Why objects are inevitable. In Proceedings of the 2013 ACM International Symposium on New Ideas, New Paradigms, and Reflections on Programming & Software, 101–116. New York: ACM. Onward! 2013.
  2. Avijit, K., P. Gupta, and D. Gupta. 2004. TIED, LibsafePlus: Tools for runtime buffer overflow protection. In SSYM’04: Proceedings of the 13th USENIX Security Symposium. Berkeley: USENIX Association.Google Scholar
  3. Banavar, G., G. Lindstrom, and D. Orr. 1994. Type-safe composition of object modules. Technical report UUCS-94-001. Salt Lake City: University of Utah.Google Scholar
  4. Bershad, B.N., C. Chambers, S. Eggers, C. Maeda, D. McNamee, P. Pardyak, S. Savage, and E.G. Sirer. 1995. SPIN—an extensible microkernel for application-specific operating system services. SIGOPS Operating Systems Review 29(1): 74–77. CrossRefGoogle Scholar
  5. Borenstein, N., and N. Freed. 1993. RFC 1521: MIME (Multipurpose internet mail extensions) part one: Mechanisms for specifying and describing the format of Internet message bodies. IETF Request for Comments. Fremont: Internet Engineering Task Force.Google Scholar
  6. Bracha, G., and D. Ungar 2004. Mirrors: Design principles for meta-level facilities of object-oriented programming languages. In Proceedings of the 19th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications, OOPSLA’04, 331–344. New York: ACM. Google Scholar
  7. Bruening, D., Q. Zhao, and S. Amarasinghe. 2012. Transparent dynamic instrumentation. In Proceedings of the 8th ACM SIGPLAN/SIGOPS Conference on Virtual Execution Environments, VEE’12, 133–144. New York: ACM. CrossRefGoogle Scholar
  8. Cargill, T.A. 1986. Pi: A case study in object-oriented programming. In Conference Proceedings on Object-Oriented Programming Systems, Languages and Applications, OOPLSA’86, 350–360. New York: ACM. CrossRefGoogle Scholar
  9. Cook, W.R. 1989. A denotational semantics of inheritance. Technical report. Providence: Brown University.Google Scholar
  10. Cook, W.R. 2009. On understanding data abstraction, revisited. In Proceedings of the 24th ACM SIGPLAN Conference on Object Oriented Programming Systems Languages and Applications, OOPSLA’09, 557–572. New York: ACM. Google Scholar
  11. de Dinechin, C. 2000. C++ exception handling. IEEE Concurrency 8(4): 72–79CrossRefGoogle Scholar
  12. Dougherty, D., and A. Robbins. 1997. Sed and awk. Cambridge: O’Reilly Media, Inc.Google Scholar
  13. Engler, D.R., and M.F. Kaashoek. 1995. Exterminate all operating system abstractions. In HOTOS ’95: Proceedings of the Fifth Workshop on Hot Topics in Operating Systems (HotOS-V), 78. Washington, DC: IEEE Computer Society.Google Scholar
  14. Faulkner, R., and R. Gomes. 1991. The process file system and process model in UNIX system V. In Proceedings of the Usenix Winter 1991 Conference, Dallas, 243–252, Jan 1991. USENIX Association.Google Scholar
  15. Free Standards Group. 2010. DWARF debugging information format version 4. San Francisco: Free Standards Group.Google Scholar
  16. Gabriel, R.P. 1994. Lisp: Good news, bad news, how to win big. AI Expert 6: 31–39Google Scholar
  17. Galloway, A. 2004. Protocol: How control exists after decentralization. Leonardo: MIT Press. CrossRefGoogle Scholar
  18. Garfinkel, S., D. Weise, and S. Strassmann, eds. 1994. The Unix-haters handbook. San Mateo: IDG.Google Scholar
  19. Gingell, R.A., M. Lee, X.T. Dang, and M.S. Weeks. 1987a. Shared libraries in SunOS. In Proceedings of the USENIX Summer Conference, 375–390.Google Scholar
  20. Gingell, R.A., J.P. Moran, and W.A. Shannon. 1987b. Virtual memory architecture in SunOS. In Proceedings of the USENIX Summer Conference, 81–94. Berkeley: USENIX Association.Google Scholar
  21. Goldberg, A., and A.C. Kay. 1976. Smalltalk-72 instruction manual. Palo Alto: Xerox Corporation.Google Scholar
  22. Goldberg, A., and D. Robson. 1983. Smalltalk-80: The language and its implementation. Boston: Addison-Wesley Longman Publishing Co., Inc.Google Scholar
  23. Hinnant, D. (1984). Benchmarking UNIX systems. Byte Magazine 9(8): 132–135, 400–409.Google Scholar
  24. Hollingsworth, J., O. Niam, B. Miller, Z. Xu, M. Goncalves, and L. Zheng. 1997. MDL: A language and compiler for dynamic program instrumentation. In Proceedings of the International Conference on Parallel Architectures and Compilation Techniques, 201–212. Los Alamitos: IEEE.CrossRefGoogle Scholar
  25. Hunt, G.C., and J.R. Larus. 2007. Singularity: Rethinking the software stack. SIGOPS Operating Systems Review 41(2): 37–49.CrossRefGoogle Scholar
  26. Ingalls, D., T. Kaehler, J. Maloney, S. Wallace, and A. Kay. 1997. Back to the future: The story of Squeak, a practical Smalltalk written in itself. ACM SIGPLAN Notices 32(10): 318–326.CrossRefGoogle Scholar
  27. Ingalls, D. 1981. Design principles behind Smalltalk. Byte Magazine 6(8): 286–298.Google Scholar
  28. Kantee, A., and A. Crooks. 2007. Refuse: Userspace fuse reimplementation using puffs. In Proceedings of the 6th European BSD Conference (EuroBSDCon).Google Scholar
  29. Kay, A.C. 1993. The early history of Smalltalk. In The Second ACM SIGPLAN Conference on History of Programming Languages, HOPL-II, 69–95. New York: ACM. CrossRefGoogle Scholar
  30. Kell, S. 2010. Component adaptation and assembly using interface relations. In Proceedings of 25th ACM International Conference on Systems, Programming Languages, Applications: Software for Humanity, OOPSLA’10. New York: ACM.Google Scholar
  31. Kernighan, B.W., and R. Pike. 1984. The UNIX programming environment. New Delhi: Prentice Hall Professional Technical Reference.Google Scholar
  32. Kessler, P.B. 1990. Fast breakpoints: Design and implementation. In Proceedings of the ACM SIGPLAN 1990 Conference on Programming Language Design and Implementation, PLDI’90, 78–84. New York: ACM. CrossRefGoogle Scholar
  33. Killian, T.J. 1984. Processes as files. In USENIX Summer Conference Proceedings. El Cerrito: USENIX Association.Google Scholar
  34. Kleiman, S.R. 1986. Vnodes: An architecture for multiple file system types in Sun UNIX. In Proceedings of the USENIX Summer Conference, vol 86, 238–247. El Cerrito: USENIX Association.Google Scholar
  35. Leslie, I., D. McAuley, R. Black, T. Roscoe, P. Barham, D. Evers, R. Fairbairns, and E. Hyden. 1996. The design and implementation of an operating system to support distributed multimedia applications. IEEE Journal on Selected Areas in Communications 14: 1280–1297.CrossRefGoogle Scholar
  36. Makris, K. 2009. Whole-program dynamic software updating. Ph.D. thesis, Arizona State University.Google Scholar
  37. Mochel, P. 2005. The sysfs filesystem. In Proceedings of the Linux Symposium, vol. 1, Ottawa.Google Scholar
  38. Neamtiu, I., M. Hicks, G. Stoyle, and M. Oriol. 2006. Practical dynamic software updating for C. In PLDI ’06: Proceedings of the 2006 ACM SIGPLAN Conference on Programming Language Design and Implementation. New York: ACM.Google Scholar
  39. Noble, J., and R. Biddle. 2002. Notes on postmodern programming. Technical report CS-TR-02-9. Wellington: Victoria University of Wellington.Google Scholar
  40. Pike, R., D. Presotto, K. Thompson, H. Trickey, et al. 1990. Plan 9 from bell labs. In Proceedings of the Summer 1990 UKUUG Conference.Google Scholar
  41. Rashid, R., R. Baron, A. Forin, D. Golub, M. Jones, D. Orr, and R. Sanzi. 1989. Mach: A foundation for open systems [operating systems]. In Proceedings of the Second Workshop on Workstation Operating Systems, 109–113.Google Scholar
  42. Ritchie, D.M. 1984. The UNIX system: The evolution of the UNIX time-sharing system. AT&T Bell Laboratories Technical Journal 63(8): 1577–1593. CrossRefGoogle Scholar
  43. Ritchie, D.M. 1993. The development of the C language. In The Second ACM SIGPLAN Conference on History of Programming Languages, HOPL-II, 201–208. New York: ACM. CrossRefGoogle Scholar
  44. Ritchie, D.M., and K. Thompson. 1974. The UNIX time-sharing system. Communication ACM 17: 365–375. CrossRefGoogle Scholar
  45. Roscoe, T. 1995. CLANGER: An interpreted systems programming language. SIGOPS Operating Systems Review 29(2): 13–20.CrossRefGoogle Scholar
  46. Schelvis, M., and E. Bledoeg. 1988. The implementation of a distributed Smalltalk. In ECOOP ’88 European Conference on Object-Oriented Programming, Lecture notes in computer science, vol 322, eds. Gjessing S. and K. Nygaard, 212–232 Berlin/Heidelberg: Springer. CrossRefGoogle Scholar
  47. Smaragdakis, Y. 2002. Layered development with (Unix) dynamic libraries. In Software reuse: Methods, techniques, and tools, Lecture notes in computer science, vol. 2319, ed. Gacek C, 33–45. Berlin/Heidelberg: Springer. CrossRefGoogle Scholar
  48. Wall, L., and M. Loukides (2000). Programming Perl. Sebastopol: O’Reilly & Associates, Inc.Google Scholar
  49. Zhao, Q., R. Rabbah, S. Amarasinghe, L. Rudolph, and W.F. Wong. 2008. How to do a million watchpoints: Efficient debugging using dynamic instrumentation. In Proceedings of the Joint European Conferences on Theory and Practice of Software 17th International Conference on Compiler Construction, CC’08/ETAPS’08, 147–162. Berlin/Heidelberg: Springer. Google Scholar
  50. Zimmermann, H. (1988). OSI reference model: The ISO model of architecture for open systems interconnection. In Innovations in internetworking, ed. Partridge C, 2–9. Norwood: Artech House, Inc. Google Scholar

Copyright information

© Springer Nature Switzerland AG 2018

Authors and Affiliations

  1. 1.Computer LaboratoryUniversity of CambridgeCambridgeUK

Personalised recommendations