DeveloperUniversity of Waterloo
Written inEh, Zed, assembly language
OS familyRTOS
Working stateDiscontinued
Initial releaseOctober 1976; 47 years ago (1976-10)
Marketing targetResearch
Available inEnglish
Update methodRecompiling
PlatformsHoneywell 6050
Data General Nova 2
Texas Instruments TI990/10
Kernel typeMicrokernel
Succeeded byPort, Verex, Harmony, V

Thoth is a real-time, message passing operating system (OS) developed at the University of Waterloo in Waterloo, Ontario Canada.


Thoth was developed at the University of Waterloo in Waterloo, Ontario, Canada. The curriculum at Waterloo includes a Real Time Operating Systems course and an associated "Train lab", where students must develop a real-time operating system (RTOS) to control a model track with multiple trains.[1][2][3]

In 1972, the B programming language, a derivative of BCPL, was brought to Waterloo by Stephen C. Johnson while on sabbatical from Bell Labs.[4] A new language derived from B, named Eh, was developed at Waterloo. Thoth was written originally in Eh with some assembly language.[5][6]

Initial development of Thoth occurred on a Honeywell 6050 computer.[7] It was first run on a Data General Nova 2 in May 1976, and was next ported to a Texas Instruments TI990/10 in August 1976.[7][5]

In October 1976, the University of Waterloo published Laurence S. Melen's Master's Thesis, titled "A Portable Real-Time Executive, Thoth".[8]

Eh was later upgraded, in part with the addition of data types, and renamed Zed. Thoth was then rewritten in Zed.[9][10][11][12][13]

One of the early principal developers of Thoth was David Cheriton. Cheriton would go on to develop the Verex kernel, and the V-System OS; both influenced by Thoth. Another early developer was Michael Malcolm, who would later found Waterloo Microsystems, Network Appliances, Inc., Blue Coat Systems, and Kaliedescape, several of whose operating systems are believed to have been derived from or influenced by Thoth.

Certain papers describe DEMOS as the inspiration for Thoth.[14] As prior art Cheriton cited Per Brinch Hansen's RC 4000, then listed Thoth, DEMOS, and Accent together as later developments.[15] Other influences on the development of Thoth included Multics, Data General's RTOS, Honeywell GCLS, and Unix.[5] Later references cite Thoth as the original implementation of its particular use of synchronous message passing and multiprocess program structure, which were subsequently applied by other projects.[16]: 2 

Work on Thoth ended around 1982.[17]


Thoth was developed to meet four goals:[7]

  1. Easily portable to other hardware[3]
  2. Programs run as a set of inexpensive, cooperating concurrent processes with efficient inter-process communications (IPC)[5]
  3. Suitable for real-time uses as to system response to external events
  4. Adaptable and scalable to a wide range of real-time uses

Thoth exposes the same abstract machine to application software, regardless of the underlying physical machine.[5][18] This abstract machine was defined with certain minimal requirements, such that meeting these requirements allowed a given computer to be included in the Thoth Domain of potential Thoth port targets.

Processes running under Thoth can be grouped into "Teams". All processes within a team share a common address space and can share data.[19][7] This is similar to other systems' concepts of "lightweight processes" or threads.[20] Processes not members of the same team communicate using Thoth's IPC.

Inter Process Communication in Thoth is primarily accomplished by means of synchronous message passing.[7] This approach greatly simplified message queueing.[21]

Although the term was not current when the original papers were written, Thoth has been called a microkernel.[22][20][23]

Thoth's synchronous message passing IPC lent itself to the application of an anthropomorphic programming model, building on the work of Carl Hewitt's actor model, and of Smalltalk.[17]


The Thoth operating system provided either the basis or the inspiration for several later projects, some of which are listed below.




  1. ^ "CS 452 Real-Time Programming". University of Waterloo, Cheriton School of Computer Science.
  2. ^ "CS 452/652 - Real-time Programming". University of Waterloo, Computing Science Computing Facility.
  3. ^ a b Malcolm, Michael (24 March 2009). "2009 March 24: Deloitte speakers series". University of Waterloo, Institute of Computer Research.
  4. ^ Ritchie, Dennis M. (April 1993). The Development of the C Language (PDF). Association for Computing Machinery. Archived from the original (PDF) on 2015-07-24. Retrieved 2020-10-06.
  5. ^ a b c d e Cheriton, David R.; Malcolm, Michael A.; Melen, Lawrence S.; Sager, Gary R. (March 1978). "Thoth, a Portable Real-Time Operating System (Revised)" (PDF). University of Waterloo Computer Science Department. ((cite journal)): Cite journal requires |journal= (help)
  6. ^ Braga, Reinaldo S. C. (November 1976). "Eh Reference Manual" (PDF). University of Waterloo Computer Science Department. ((cite journal)): Cite journal requires |journal= (help)
  7. ^ a b c d e Cheriton, David R.; Malcolm, Michael A.; Melen, Lawrence S.; Sager, Gary R. (February 1979). "Thoth, a Portable, Real-Time Operating System" (PDF). Communications of the ACM. 22 (2): 105–115. doi:10.1145/359060.359074. S2CID 14350500.
  8. ^ Melen, Laurence S. (October 1976). "A Portable Real-Time Executive, Thoth". Department of Computer Science, University of Waterloo. ((cite journal)): Cite journal requires |journal= (help)
  9. ^ Lion, John (October 1993). "Letter from New Jersey — January, 1979". Australian Unix Users Group Newsletter. Vol. 14, no. 5. The AUUG Inc. pp. 48–51.
  10. ^ "Programming Languages Database: Z". epocalc. 2012.
  11. ^ Bonkowski, G. Bert; Gentleman, W. Morven; Malcolm, Michael A. (May 1979). "Porting The Zed Compiler" (PDF). University of Waterloo Computer Science Department. ((cite journal)): Cite journal requires |journal= (help)
  12. ^ a b Lockhart, Thomas Wayne (November 1979). The Design of a Verifiable Operating System Kernel (Thesis). The University of British Columbia. doi:10.14288/1.0051812.
  13. ^ Kinnersley, Bill (23 January 1995). "The Language List: Version 2.4".
  14. ^ Hutchinson, Norman A. (1987). "Emerald: An Object-Based Language for Distributed Programming" (PDF). University of Washington. ((cite journal)): Cite journal requires |journal= (help)
  15. ^ a b Cheriton, David R. (March 1988). "The V Distributed System" (PDF). Communications of the ACM. 31 (3): 314–333. doi:10.1145/42392.42400. S2CID 7523994.
  16. ^ a b Burkowski, Forbes J.; Clarke, Charles L. A.; Cowan, S. Crispin; Vreugdenhil, G. J. (February 1995). "Performance Evaluation of the Sylvan Multiprocessor Architecture". University of Waterloo. ((cite journal)): Cite journal requires |journal= (help)
  17. ^ a b Booth, Kellogg S.; Schaeffer, Jonathan; Gentleman, W. Morven (February 1984). "Anthropomorphic Programming" (PDF). University of Waterloo Computer Science Department. ((cite journal)): Cite journal requires |journal= (help)
  18. ^ Chubb, Lucy (1987). "A Multiprocess Operating System for 16 Bit Microcomputers". University of New South Sales, School of Electrical Engineering and Computer Science. ((cite journal)): Cite journal requires |journal= (help)
  19. ^ Comer, Douglas E.; Munson, Steven B (1988). "Efficient Interprocess Communication Using Shared Memory". Purdue University Department of Computer Science. ((cite journal)): Cite journal requires |journal= (help)
  20. ^ a b O'Sullivan, Bryan (13 August 1996). "Answers to frequently asked questions for comp.os.research: Part 1 of 3 — 2.2.3. The history of threads". University at Albany Department of Computer Science.
  21. ^ Fleisch, Brett D.; Co, Mark Allan A. (April 1997). "Workplace Microkernel and OS: A Case Study". Department of Computer Science, University of California. CiteSeerX ((cite journal)): Cite journal requires |journal= (help)
  22. ^ Appavoo, Jonathan. "Optimizing Multi-Processor Operating Systems Software Research Review" (PDF). Boston University Department of Computer Science. ((cite journal)): Cite journal requires |journal= (help)
  23. ^ Depoutovitch, Alexandre (2011). "Otherworld — Giving Applications a Chance to Survive OS Kernel Crashes" (PDF). University of Toronto Graduate Department of Computer Science. ((cite journal)): Cite journal requires |journal= (help)
  24. ^ Cowan, D. D.; Boswell, F. D.; Grove, T. R. (December 1984). "A Distributed File-Server for a Personal Computer Network" (PDF). University of Waterloo Computer Systems Department. ((cite journal)): Cite journal requires |journal= (help)
  25. ^ Fonds, Wes Graham (5 August 1983). "Chronology: 1980s: A Decade of Expansion — 1981". University of Waterloo — Cheriton School of Computer Science.
  26. ^ Tanner, P. P.; Buxton, W. (1985). Some Issues in Future User Interface Management System (UIMS) Development. User Interface Management Systems. Berlin. pp. 67–79.
  27. ^ Boyle, Patrick David (June 1982). The Design of a Distributed Kernel for a Multiprocessor System (Thesis). University of British Columbia Department of Computer Science. doi:10.14288/1.0051817.
  28. ^ Tevanian Jr., Avadis; Rashid, Richard F.; Golub, David B.; Black, David L.; Cooper, Eric; Young, Michael W. (August 1987). "Mach Threads and the Unix Kernel: The Battle for Control". Department of Computer Science Carnegie-Mellon University. ((cite journal)): Cite journal requires |journal= (help)
  29. ^ Chakraborty, Pinaki (2010). "Research Purpose Operating Systems — A Wide Survey" (PDF). GESJ: Computer Science and Telecommunications (3): 147–160. ISSN 1512-1232.
  30. ^ Bin Shafaat, Ahmed; Xu, Shuxiang (26 December 2017). "A Comparative Study of Technologies Developed in Perspective of Distributed Operating Systems" (PDF). AMSE Journals: AMSE IIETA Publication: 2017-Series: Advances B. 60 (3): 613–629.
  31. ^ Burkowski, F. J.; Cormack, G. V.; Dyment, J. D.; Pachl, J. K. (28 February 1987). "A Message-Based Architecture For High Concurrency". In Heath, Michael T. (ed.). Hypercube Multiprocessors 1986. Society for Industrial & Applied Mathematics, U.S. pp. 27–37. ISBN 978-0898712094.
  32. ^ Beach, Richard J.; Beatty, John C.; Booth, Kellogg S.; Plebon, Darlene A.; Fiume, Eugene L. (July 1982). "The Message is the Medium: Multiprocess Structuring of an Interactive Paint Program". Computer Graphics. Vol. 16, no. 3. Association for Computing Machinery. pp. 277–287. doi:10.1145/965145.801292.
  33. ^ Plebon, Darlene A.; Booth, Kellogg S. (1982). "Interactive Picture Creation System" (PDF). University of Waterloo. ((cite journal)): Cite journal requires |journal= (help)
  34. ^ Watt, Stephen Michael (1985). "Bounded Parallelism in Computer Algebra" (PDF). University of Waterloo. ((cite journal)): Cite journal requires |journal= (help)
  35. ^ Schröder, W. "A Distributed Process Execution and Communication Environment for High-Performance Application Systems" (PDF). Technische Universität Berlin. ((cite journal)): Cite journal requires |journal= (help)
  36. ^ van Dijk, G. J. W. (1 January 1993). "The design of the EMPS multiprocessor executive for distributed computing" (PDF). Technische Universiteit Eindhoven. ((cite journal)): Cite journal requires |journal= (help)
  37. ^ Chan, Patrick P. (July 1984). "Learning Considerations in User Interface Design: The Room Model" (PDF). University of Waterloo Computer Science Department. ((cite journal)): Cite journal requires |journal= (help)
  38. ^ Pai, Vivek S.; Druschel, Peter; Zwaenepoel, Willy. "Flash: An efficient and portable Web server" (PDF). Rice University Department of Computer Science. ((cite journal)): Cite journal requires |journal= (help)
  39. ^ "Embedded Applications — Technology for the Real World". The infraNET Project. 29 May 1998.
  40. ^ Morris, James B. (February–April 1983). "The Powerful Tools of QNX". PC Magazine. pp. 269–297.
  41. ^ Advani, Prakash (14 June 2001). "A talk with Paul Leroux".
  42. ^ Oberle, Bonnie (30 October 1998). "Returning the favour". Imprint. Impring Publications, Waterloo. p. 7.
  43. ^ Sager, Gary R.; Melber, John A.; Fong, Kenneth T. (January 1985). "System 75: The Oryx/Pecos operating system". AT&T Technical Journal. Vol. 64, no. 1. pp. 251–268. doi:10.1002/j.1538-7305.1985.tb00431.x.
  44. ^ Coppens, J.A.W.M (August 1988). "Information security in Local Area Networks, especially in Waterloo Port" (PDF). Technische Universiteit Eindhoven. ((cite journal)): Cite journal requires |journal= (help)
  45. ^ "Port - (Computer Language)". Online Historical Encyclopaedia of Programming Languages.
  46. ^ "Port". Computer Dictionary of Information Technology.
  47. ^ Rigney, Steve (April 1992). "LAN Fundamentals Part 2 — LANstep". PC Magazine. p. 316.
  48. ^ Nunn, Tom (24 August 1994). "Hayes tries to unload Kitchener-Waterloo research and development facility". The Gazette. Montreal, QC Canada.
  49. ^ Hitz, David; Harris, Guy; Lau, James K.; Schwartz, Allan M. (January 1990). "Using Unix as One Component of a Lightweight Distributed Kernel for Multiprocessor File Servers" (PDF). Auspex. ((cite journal)): Cite journal requires |journal= (help)
  50. ^ Kopp, Carlo (June 1997). "Brave Little Toasters?". Dr. Carlo Kopps's Industry Publications.
  51. ^ Jerian, Charles P. "Chuck's Home Page — I worked for CacheFlow Inc".

Further reading