Skip to main content

Unix, Plan 9 and the Lurking Smalltalk

  • Chapter
  • First Online:
Reflections on Programming Systems

Part of the book series: Philosophical Studies Series ((PSSP,volume 133))

  • 219 Accesses

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.

This is a preview of subscription content, log in via an institution to check access.

Access this chapter

Chapter
USD 29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
eBook
USD 119.00
Price excludes VAT (USA)
  • Available as EPUB and PDF
  • Read on any device
  • Instant download
  • Own it forever
Hardcover Book
USD 159.99
Price excludes VAT (USA)
  • Durable hardcover edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info

Tax calculation will be finalised at checkout

Purchases are for personal use only

Institutional subscriptions

Notes

  1. 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. 2.

    I say “class-based” since “object-oriented” is arguably an inappropriate term to apply to mainstream styles of Java.

  3. 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. 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. 5.

    See his 2012 SPLASH keynote; slides retrieved from http://talks.golang.org/2012/splash.article on 2017∕5∕1.

  6. 6.

    ioctl() first appeared in 7th Edition Unix, although calls including gtty() and stty() are its forebears in earlier versions.

  7. 7.

    Various sources on the web attribute this statement to Kay, although I have been unable to find a definitive reference.

  8. 8.

    See http://kix.in/2008/06/19/an-alternative-to-shared-libraries/, retrieved on 2017∕5∕1.

  9. 9.

    This is standard, but has the confusing consequence that “reflection” includes the non-reflexive case.

  10. 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.

    Google Scholar 

  • 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 

  • 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

    Article  Google Scholar 

  • 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 

  • 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

    Google Scholar 

  • 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

    Chapter  Google Scholar 

  • 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

    Chapter  Google Scholar 

  • Cook, W.R. 1989. A denotational semantics of inheritance. Technical report. Providence: Brown University.

    Google Scholar 

  • 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

    Google Scholar 

  • de Dinechin, C. 2000. C++ exception handling. IEEE Concurrency 8(4): 72–79

    Article  Google Scholar 

  • Dougherty, D., and A. Robbins. 1997. Sed and awk. Cambridge: O’Reilly Media, Inc.

    Google Scholar 

  • 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 

  • 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 

  • Free Standards Group. 2010. DWARF debugging information format version 4. San Francisco: Free Standards Group.

    Google Scholar 

  • Gabriel, R.P. 1994. Lisp: Good news, bad news, how to win big. AI Expert 6: 31–39

    Google Scholar 

  • Galloway, A. 2004. Protocol: How control exists after decentralization. Leonardo: MIT Press. http://www.Books24x7.com. https://books.google.co.uk/books?id=7ePFlE5oo7kC

    Book  Google Scholar 

  • Garfinkel, S., D. Weise, and S. Strassmann, eds. 1994. The Unix-haters handbook. San Mateo: IDG.

    Google Scholar 

  • 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 

  • 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 

  • Goldberg, A., and A.C. Kay. 1976. Smalltalk-72 instruction manual. Palo Alto: Xerox Corporation.

    Google Scholar 

  • Goldberg, A., and D. Robson. 1983. Smalltalk-80: The language and its implementation. Boston: Addison-Wesley Longman Publishing Co., Inc.

    Google Scholar 

  • Hinnant, D. (1984). Benchmarking UNIX systems. Byte Magazine 9(8): 132–135, 400–409.

    Google Scholar 

  • 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.

    Chapter  Google Scholar 

  • Hunt, G.C., and J.R. Larus. 2007. Singularity: Rethinking the software stack. SIGOPS Operating Systems Review 41(2): 37–49.

    Article  Google Scholar 

  • 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.

    Article  Google Scholar 

  • Ingalls, D. 1981. Design principles behind Smalltalk. Byte Magazine 6(8): 286–298.

    Google Scholar 

  • Kantee, A., and A. Crooks. 2007. Refuse: Userspace fuse reimplementation using puffs. In Proceedings of the 6th European BSD Conference (EuroBSDCon).

    Google Scholar 

  • 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

    Chapter  Google Scholar 

  • 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 

  • Kernighan, B.W., and R. Pike. 1984. The UNIX programming environment. New Delhi: Prentice Hall Professional Technical Reference.

    Google Scholar 

  • 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

    Chapter  Google Scholar 

  • Killian, T.J. 1984. Processes as files. In USENIX Summer Conference Proceedings. El Cerrito: USENIX Association.

    Google Scholar 

  • 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 

  • 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.

    Article  Google Scholar 

  • Makris, K. 2009. Whole-program dynamic software updating. Ph.D. thesis, Arizona State University.

    Google Scholar 

  • Mochel, P. 2005. The sysfs filesystem. In Proceedings of the Linux Symposium, vol. 1, Ottawa.

    Google Scholar 

  • 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 

  • Noble, J., and R. Biddle. 2002. Notes on postmodern programming. Technical report CS-TR-02-9. Wellington: Victoria University of Wellington.

    Google Scholar 

  • 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 

  • 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 

  • 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

    Article  Google Scholar 

  • 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

    Chapter  Google Scholar 

  • Ritchie, D.M., and K. Thompson. 1974. The UNIX time-sharing system. Communication ACM 17: 365–375. https://doi.org/10.1145/361011.361061

    Article  Google Scholar 

  • Roscoe, T. 1995. CLANGER: An interpreted systems programming language. SIGOPS Operating Systems Review 29(2): 13–20.

    Article  Google Scholar 

  • 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

    Chapter  Google Scholar 

  • 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

    Chapter  Google Scholar 

  • Wall, L., and M. Loukides (2000). Programming Perl. Sebastopol: O’Reilly & Associates, Inc.

    Google Scholar 

  • 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

    Google Scholar 

  • 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

    Google Scholar 

Download references

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

Authors

Corresponding author

Correspondence to Stephen Kell .

Editor information

Editors and Affiliations

Rights and permissions

Reprints and permissions

Copyright information

© 2018 Springer Nature Switzerland AG

About this chapter

Check for updates. Verify currency and authenticity via CrossMark

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

Publish with us

Policies and ethics