Abstract
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.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Notes
- 1.
This occurred not only from the abortive beta release of Apple Smalltalk in 1985, but from the 1979 demonstration of Smalltalk on Xerox’s Dorado machine which would inspire the software for Apple’s Lisa and later products.
- 2.
I say “class-based” since “object-oriented” is arguably an inappropriate term to apply to mainstream styles of Java.
- 3.
“Redirection” sounds slightly stronger, since it seems to imply unbinding and eliminating whatever entity was previously connected; but consider that with interposition, too, there is no obligation for an interposing object to make any use of the (implied) interposed-on object.
- 4.
Although specified in the 4.2BSD design, around 1982, and described in the Programmer’s Manual of the 4.3 release in 1986, this interface would remain unimplemented in any BSD release until 1990’s 4.3BSD-Reno.
- 5.
See his 2012 SPLASH keynote; slides retrieved from http://talks.golang.org/2012/splash.article on 2017∕5∕1.
- 6.
ioctl() first appeared in 7th Edition Unix, although calls including gtty() and stty() are its forebears in earlier versions.
- 7.
Various sources on the web attribute this statement to Kay, although I have been unable to find a definitive reference.
- 8.
See http://kix.in/2008/06/19/an-alternative-to-shared-libraries/, retrieved on 2017∕5∕1.
- 9.
This is standard, but has the confusing consequence that “reflection” includes the non-reflexive case.
- 10.
This is the so-called “zero cost” exception handling design favoured by C++ implementations (de Dinechin 2000).
References
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. https://doi.org/10.1145/2509578.2514738
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.
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.
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. https://doi.org/10.1145/202453.202472
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.
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. https://doi.org/10.1145/1028976.1029004
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. https://doi.org/10.1145/2151024.2151043
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. https://doi.org/10.1145/28697.28733
Cook, W.R. 1989. A denotational semantics of inheritance. Technical report. Providence: Brown University.
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. https://doi.org/10.1145/1640089.1640133
de Dinechin, C. 2000. C++ exception handling. IEEE Concurrency 8(4): 72–79
Dougherty, D., and A. Robbins. 1997. Sed and awk. Cambridge: O’Reilly Media, Inc.
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.
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.
Free Standards Group. 2010. DWARF debugging information format version 4. San Francisco: Free Standards Group.
Gabriel, R.P. 1994. Lisp: Good news, bad news, how to win big. AI Expert 6: 31–39
Galloway, A. 2004. Protocol: How control exists after decentralization. Leonardo: MIT Press. http://www.Books24x7.com. https://books.google.co.uk/books?id=7ePFlE5oo7kC
Garfinkel, S., D. Weise, and S. Strassmann, eds. 1994. The Unix-haters handbook. San Mateo: IDG.
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.
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.
Goldberg, A., and A.C. Kay. 1976. Smalltalk-72 instruction manual. Palo Alto: Xerox Corporation.
Goldberg, A., and D. Robson. 1983. Smalltalk-80: The language and its implementation. Boston: Addison-Wesley Longman Publishing Co., Inc.
Hinnant, D. (1984). Benchmarking UNIX systems. Byte Magazine 9(8): 132–135, 400–409.
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.
Hunt, G.C., and J.R. Larus. 2007. Singularity: Rethinking the software stack. SIGOPS Operating Systems Review 41(2): 37–49.
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.
Ingalls, D. 1981. Design principles behind Smalltalk. Byte Magazine 6(8): 286–298.
Kantee, A., and A. Crooks. 2007. Refuse: Userspace fuse reimplementation using puffs. In Proceedings of the 6th European BSD Conference (EuroBSDCon).
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. https://doi.org/10.1145/154766.155364
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.
Kernighan, B.W., and R. Pike. 1984. The UNIX programming environment. New Delhi: Prentice Hall Professional Technical Reference.
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. https://doi.org/10.1145/93542.93555
Killian, T.J. 1984. Processes as files. In USENIX Summer Conference Proceedings. El Cerrito: USENIX Association.
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.
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.
Makris, K. 2009. Whole-program dynamic software updating. Ph.D. thesis, Arizona State University.
Mochel, P. 2005. The sysfs filesystem. In Proceedings of the Linux Symposium, vol. 1, Ottawa.
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.
Noble, J., and R. Biddle. 2002. Notes on postmodern programming. Technical report CS-TR-02-9. Wellington: Victoria University of Wellington.
Pike, R., D. Presotto, K. Thompson, H. Trickey, et al. 1990. Plan 9 from bell labs. In Proceedings of the Summer 1990 UKUUG Conference.
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.
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. https://doi.org/10.1002/j.1538-7305.1984.tb00054.x
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. https://doi.org/10.1145/154766.155580
Ritchie, D.M., and K. Thompson. 1974. The UNIX time-sharing system. Communication ACM 17: 365–375. https://doi.org/10.1145/361011.361061
Roscoe, T. 1995. CLANGER: An interpreted systems programming language. SIGOPS Operating Systems Review 29(2): 13–20.
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. https://doi.org/10.1007/3-540-45910-3_13
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. https://doi.org/10.1007/3-540-46020-9_3
Wall, L., and M. Loukides (2000). Programming Perl. Sebastopol: O’Reilly & Associates, Inc.
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. http://dl.acm.org/citation.cfm?id=1788374.1788388
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. http://dl.acm.org/citation.cfm?id=59309.59310
Acknowledgements
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.
Author information
Authors and Affiliations
Corresponding author
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2018 Springer Nature Switzerland AG
About this chapter
Cite this chapter
Kell, S. (2018). Unix, Plan 9 and the Lurking Smalltalk. In: De Mol, L., Primiero, G. (eds) Reflections on Programming Systems. Philosophical Studies Series, vol 133. Springer, Cham. https://doi.org/10.1007/978-3-319-97226-8_6
Download citation
DOI: https://doi.org/10.1007/978-3-319-97226-8_6
Published:
Publisher Name: Springer, Cham
Print ISBN: 978-3-319-97225-1
Online ISBN: 978-3-319-97226-8
eBook Packages: Religion and PhilosophyPhilosophy and Religion (R0)