Computers are the most fascinating machines ever invented. Virtually everyone uses them in one form or another every day. However, most people only have a vague understanding of how computers work, let alone how to program them. Yet computing has become a commodity almost like energy, food, or water. The question is if the general public, for modern society to work properly, needs to understand computing better than what people generally know about, say, producing electricity or clean water. We argue that the intractability and even undecidability of so many important problems in computer science are the reason that computing is indeed different. It is the limits of computability, not just the capabilities of computers, that is the source of unbounded potential in the automation of everything. The challenge is to teach people not just programming but also how programming is the neverending process of overcoming those limits. We have developed a system called selfie that implements a self-referential compiler, emulator, and hypervisor that can compile, execute, and virtualize itself. We use selfie to teach undergraduate and graduate students computer science from first principles. In particular, we show them how self-referentiality in selfie is capability and limitation of computing at the same time. Here, we discuss ongoing early work on integrating verification technology into selfie as yet another way of exploring what computing is.
This is a preview of subscription content, access via your institution.
Biere, A., Cimatti, A., Clarke, E., Zhu, Y.: Symbolic model checking without BDDs. In: Cleaveland, W.R. (ed.) TACAS 1999. LNCS, vol. 1579, pp. 193–207. Springer, Heidelberg (1999). https://doi.org/10.1007/3-540-49059-0_14
Biere, A., Heule, M., van Maaren, H., Walsh, T. (eds.): Handbook of Satisfiability, Frontiers in Artificial Intelligence and Applications, vol. 185. IOS Press, Amsterdam (2009)
Cadar, C., Dunbar, D., Engler, D.: KLEE: unassisted and automatic generation of high-coverage tests for complex systems programs. In: Proceedings of USENIX Conference on Operating Systems Design and Implementation (OSDI), pp. 209–224. USENIX Association (2008)
Godefroid, P., Levin, M.Y., Molnar, D.: Automated whitebox fuzz testing. In: Proceedings of Symposium on Network and Distributed Systems Security (NDSS), pp. 151–166 (2008)
Hennessy, J.L., Patterson, D.A.: Computer Architecture: A Quantitative Approach. Morgan Kaufmann, Burlington (2011)
Kaufmann, M., Manolios, P., Moore, J.S.: Computer-Aided Reasoning: An Approach. Kluwer, Alphen aan den Rijn (2000)
Kernighan, B.W., Ritchie, D.M.: The C Programming Language. Prentice Hall, Upper Saddle River (2000)
Kirsch, C.: Selfie and the basics. In: Proceedings of ACM SIGPLAN International Symposium on New Ideas, New Paradigms, and Reflections on Programming and Software (Onward!). ACM (2017)
Kumar, R.: Self-compilation and self-verification. Ph.D. thesis, University of Cambridge (2015)
Liedtke, J.: Toward real microkernels. Commun. ACM 39(9), 70–77 (1996)
Reynolds, J.C.: Definitional interpreters for higher-order programming languages. In: Proceedings of ACM Annual Conference, pp. 717–740 (1972)
Richards, M., Whitby-Strevens, C.: BCPL: The Language and its Compiler. Cambridge University Press, Cambridge (2009)
Sipser, M.: Introduction to the Theory of Computation. International Thomson Publishing, Stamford (1996)
Vizel, Y., Weissenbacher, G., Malik, S.: Boolean satisfiability solvers and their applications in model checking. Proc. IEEE 103(11), 2021–2035 (2015)
Wirth, N.: Compiler Construction. Addison Wesley, Boston (1996)
Selfie is the result of more than ten years of studying and teaching systems engineering. Many colleagues and students have been involved in its development through inspiring conversations as well as numerous coding sessions. In particular, we thank Martin Aigner, Sebastian Arming, Christian Barthel, Armin Biere, Heidi Graf, Andreas Haas, Marijn Heule, Thomas Hütter, Michael Lippautz, Cornelia Mayer, James Noble, Simone Oblasser, Peter Palfrader, Sarah Sallinger, Raja Sengupta, and Ana Sokolova as well as all the students who have taken our compiler and operating systems classes over the years. The design of the C* compiler is inspired by the Oberon compiler of Professor Niklaus Wirth from ETH Zurich . The design of the microkernel in selfie is inspired by microkernels of Professor Jochen Liedtke from University of Karlsruhe .
Work on selfie has been supported by the National Research Network RiSE on Rigorous Systems Engineering (Austrian Science Fund (FWF) Grant S11404-N23 and S11411-N23), a Google PhD Fellowship, and a Google Research Grant.
Editors and Affiliations
Rights and permissions
© 2018 Springer International Publishing AG, part of Springer Nature
About this chapter
Cite this chapter
Abyaneh, A.S., Kirsch, C.M. (2018). You Can Program What You Want but You Cannot Compute What You Want. In: Lohstroh, M., Derler, P., Sirjani, M. (eds) Principles of Modeling. Lecture Notes in Computer Science(), vol 10760. Springer, Cham. https://doi.org/10.1007/978-3-319-95246-8_1
Publisher Name: Springer, Cham
Print ISBN: 978-3-319-95245-1
Online ISBN: 978-3-319-95246-8
eBook Packages: Computer ScienceComputer Science (R0)