skip to main content
10.1145/3317550.3321435acmconferencesArticle/Chapter ViewAbstractPublication PageshotosConference Proceedingsconference-collections
research-article

A fork() in the road

Authors:
Andrew Baumann
Microsoft Research
,
Jonathan Appavoo
Boston University
,
Orran Krieger
Boston University
,
Timothy Roscoe
ETH Zurich
Authors Info & Claims
Published: 13 May 2019 Publication History

Abstract

The received wisdom suggests that Unix's unusual combination of fork() and exec() for process creation was an inspired design. In this paper, we argue that fork was a clever hack for machines and programs of the 1970s that has long outlived its usefulness and is now a liability. We catalog the ways in which fork is a terrible abstraction for the modern programmer to use, describe how it compromises OS implementations, and propose alternatives.
As the designers and implementers of operating systems, we should acknowledge that fork's continued existence as a first-class OS primitive holds back systems research, and deprecate it. As educators, we should teach fork as a historical artifact, and not the first process creation mechanism students encounter.

References

[1]
The BeBook: The Kernel Kit: load_image(). ACCESS Co., 1.0 edition, March 2008. URL https://www.haiku-os.org/legacy-docs/bebook/TheKernelKit_Images.html#load_image.
[2]
The BeBook: Threads and Teams. ACCESS Co., 1.0 edition, March 2008. URL https://www.haiku-os.org/legacy-docs/bebook/TheKernelKit_ThreadsAndTeams_Overview.html.
[3]
Mike Accetta, Robert Baron, William Bolosky, David Golub, Richard Rashid, Avadis Tevanian, and Michael Young. Mach: A new kernel foundation for UNIX development. In USENIX Summer Conference, pages 93--113, June 1986.
[4]
Thomas Anderson and Michael Dahlin. Operating Systems: Principles and Practice. Recursive Books, 2nd edition, 2014. ISBN 978-0-9856735-2-9.
[5]
Jonathan Appavoo, Dilma Da Silva, Orran Krieger, Marc Auslander, Michal Ostrowski, Bryan Rosenburg, Amos Waterland, Robert W. Wisniewski, Jimi Xenidis, Michael Stumm, and Livio Soares. Experience distributing objects in an SMMP OS. ACM Transactions on Computer Systems, 25(3), August 2007. ISSN 0734--2071.
[6]
Sergei Arnautov, Bohdan Trach, Franz Gregor, Thomas Knauth, Andre Martin, Christian Priebe, Joshua Lind, Divya Muthukumaran, Dan O'Keeffe, Mark L. Stillwell, David Goltzsche, Dave Eyers, Rüdiger Kapitza, Peter Pietzuch, and Christof Fetzer. SCONE: Secure Linux containers with Intel SGX. In 12th USENIX Symposium on Operating Systems Design and Implementation, pages 689--703. USENIX Association, 2016. ISBN 978-1-931971-33-1. URL https://www.usenix.org/conference/osdi16/technical-sessions/presentation/arnautov.
[7]
Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau. Operating Systems: Three Easy Pieces, chapter 5. Arpaci-Dusseau Books, 1.00 edition, March 2018. URL http://www.ostep.org/.
[8]
Vaggelis Atlidakis, Jeremy Andrus, Roxana Geambasu, Dimitris Mitropoulos, and Jason Nieh. POSIX abstractions in modern operating systems: The old, the new, and the missing. In EuroSys Conference, pages 19:1--19:17. ACM, 2016. ISBN 978-1-4503-4240-7.
[9]
Jean Bacon and Tim Harris. Operating Systems: Concurrent and Distributed Software Design. Addison Wesley, 2003. ISBN 0-321-11789-1.
[10]
Gaurav Banga and Jeffrey C. Mogul. Scalable kernel performance for Internet servers under realistic loads. In 1998 USENIX Annual Technical Conference. USENIX Association, 1998. URL https://www.usenix.org/legacy/publications/library/proceedings/usenix98/banga.html.
[11]
Amnon Barak, Shai Guday, and Richard G. Wheeler. The MOSIX Distributed Operating System: Load Balancing for UNIX. Springer-Verlag Berlin Heidelberg, 1993.
[12]
Dotan Barak. Libibverbs Programmer's Manual: ibv_fork_init(3), October 2006. URL https://github.com/linux-rdma/rdma-core/blob/master/libibverbs/man/ibv_fork_init.3.md.
[13]
Andrew Baumann, Paul Barham, Pierre-Evariste Dagand, Tim Harris, Rebecca Isaacs, Simon Peter, Timothy Roscoe, Adrian Schuepbach, and Akhilesh Singhania. The multikernel: a new OS architecture for scalable multicore systems. In 22nd ACM Symposium on Operating Systems Principles. ACM, October 2009.
[14]
Andrew Baumann, Marcus Peinado, and Galen Hunt. Shielding applications from an untrusted cloud with Haven. In 11th USENIX Symposium on Operating Systems Design and Implementation, pages 267--283, October 2014. ISBN 978-1-931971-16-4. URL https://www.usenix.org/conference/osdi14/technical-sessions/presentation/baumann.
[15]
2.9.1 BSD System Calls Manual: vfork(2). Berkeley Software Distribution, Berkeley, CA, USA, 1983. URL https://www.freebsd.org/cgi/man.cgi?query=vfork&manpath=2.9.1+BSD.
[16]
Andrea Bittau. Toward Least-Privilege Isolation for Software. PhD thesis, Department of Computer Science, University College London, November 2009. URL http://www.scs.stanford.edu/~sorbo/bittau-phd.pdf.
[17]
Andrea Bittau, Adam Belay, Ali Mashtizadeh, David Mazières, and Dan Boneh. Hacking blind. In IEEE Symposium on Security and Privacy, pages 227--242. IEEE Computer Society, 2014. ISBN 978-1-4799-4686-0.
[18]
Daniel G. Bobrow, Jerry D. Burchfiel, Daniel L. Murphy, and Raymond S. Tomlinson. TENEX, a paged time sharing system for the PDP-10. In 3rd ACM Symposium on Operating Systems Principles. ACM, 1971.
[19]
TENEX JSYS Manual. Bolt Beranek and Newman, Cambridge, MA, USA, 2nd edition, September 1973. URL http://www.bitsavers.org/pdf/bbn/tenex/TenexJSYSMan_Sep73.pdf.
[20]
TENEX 1.33 source code, CFORK system call. Bolt Beranek and Newman, 1975. URL https://github.com/PDP-10/tenex/blob/master/133-tenex/forks.mac#L208.
[21]
Bob Boothe. Efficient algorithms for bidirectional debugging. In ACM SIGPLAN Conference on Programming Language Design and Implementation, pages 299--310. ACM, 2000. ISBN 1-58113-199-2.
[22]
Silas Boyd-Wickizer, M. Frans Kaashoek, Robert Morris, and Nickolai Zeldovich. OpLog: a library for scaling update-heavy data structures. Technical Report MIT-CSAIL-TR-2014-019, MIT CSAIL, September 2014. URL http://hdl.handle.net/172L1/89653.
[23]
Jeffrey S. Chase, Henry M. Levy, Michael J. Feeley, and Edward D. Lazowska. Sharing and protection in a single-address-space operating system. ACM Transactions on Computer Systems, 12(4):271--307, November 1994. ISSN 0734--2071.
[24]
Chromium Project. Bug 36678, 2010. URL https://crbug.com/36678.
[25]
Chromium Project. Bug 56596, 2010. URL https://crbug.com/56596.
[26]
Chromium Project. Bug 177218, 2013. URL https://crbug.com/177218.
[27]
Chromium Project. Bug 856535, 2018. URL https://crbug.com/856535.
[28]
Chromium Project. Bug 819228, 2018. URL https://crbug.com/819228.
[29]
Austin T. Clements, M. Frans Kaashoek, Nickolai Zeldovich, Robert T. Morris, and Eddie Kohler. The scalable commutativity rule: Designing scalable software for multicore processors. ACM Transactions on Computer Systems, 32(4):10:1--10:47, January 2015. ISSN 0734--2071.
[30]
OpenVMS System Services Reference Manual: $CREPRC. Compaq Computer Corporation, Houston, TX, USA, April 2001. URL http://h30266.www3.hpe.com/odl/vax/opsys/vmsos73/vmsos73/4527/4527pro_018.html#jun_147. Document number ZK4527.
[31]
Cygwin 2.11 User's Guide. Cygwin, November 2018. URL https://cygwin.com/cygwin-ug-net/highlights.html#ov-hi-process.
[32]
Casper Dik. posix_spawn() as an actual system call. Oracle Solaris Blog, February 2018. URL https://blogs.oracle.com/solaris/posix_spawn-as-an-actual-system-call.
[33]
D. Eastlake, R. Greenblatt, J. Holloway, T. Knight, and S. Nelson. ITS 1.5 Refereence Manual. MIT Artificial Intelligence Laboratory, Cambridge, MA, USA, July 1969. URL https://hdl.handle.net/172L1/6165. Memo number AIM-161A.
[34]
Rich Felker. vfork considered dangerous. October 2012. URL https://ewontfix.com/7.
[35]
Greg Gagne, Abraham Silberschatz, and Peter B. Galvin. Operating Systems Concepts. John Wiley & Sons, 9th edition, 2012. ISBN 978-1-118-06333-0.
[36]
Ben Gamsa, Orran Krieger, Jonathan Appavoo, and Michael Stumm. Tornado: Maximizing locality and concurrency in a shared memory multiprocessor operating system. In 3rd USENIX Symposium on Operating Systems Design and Implementation, February 1999. URL https://www.usenix.org/legacy/events/osdi99/gamsa.html.
[37]
GNOME Project. Merge request 95, 2018. URL https://gitlab.gnome.org/GNOME/glib/merge_requests/95.
[38]
GNU C Library. Bug 10354, 2016. URL https://sourceware.org/bugzilla/show_bug.cgi?id=10354.
[39]
Android Developer Documentation: Overview of memory management. Google, 2018. URL https://developer.android.com/topic/performance/memory-overview#SharingRAM.
[40]
Gernot Heiser and Kevin Elphinstone. L4 microkernels: The lessons from 20 years of research and deployment. ACM Transactions on Computer Systems, 34(1):1:1--1:29, April 2016. ISSN 0734--2071.
[41]
Gernot Heiser, Kevin Elphinstone, Jerry Vochteloo, Stephen Russell, and Jochen Liedtke. The Mungi single-address-space operating system. Software, Practice and Experience, 28(9):901--928, 1998.
[42]
Jon Howell, Bryan Parno, and John R. Douceur. How to run POSIX apps in a minimal picoprocess. In 2013 USENIX Annual Technical Conference, pages 321--332. USENIX Association, 2013. URL https://www.usenix.org/conference/atc13/technical-sessions/presentation/howell.
[43]
M. Frans Kaashoek, Dawson R. Engler, Gregory R. Ganger, Hector M. Briceño, Russell Hunt, David Mazières, Thomas Pinckney, Robert Grimm, John Jannotti, and Kenneth Mackenzie. Application performance and flexibility on exokernel systems. In 16th ACM Symposium on Operating Systems Principles, pages 52--65, 1997. ISBN 0-89791-916-5.
[44]
Antti Kantee. On rump kernels and the Rumprun unikernel, August 2015. URL https://xenproject.org/2015/08/06/on-rump-kernels-and-the-rumprun-unikernel/.
[45]
Avi Kivity, Dor Laor, Glauber Costa, Pekka Enberg, Nadav Har'El, Don Marti, and Vlad Zolotarov. OSv---optimizing the operating system for virtual machines. In 2014 USENIX Annual Technical Conference, pages 61--72, 2014. ISBN 978-1-931971-10-2. URL https://www.usenix.org/conference/atc14/technical-sessions/presentation/kivity.
[46]
Eddie Kohler. Harvard University CS 61 problem set 4: WeensyOS, October 2018. URL https://cs61.seas.harvard.edu/site/2018/WeensyOS/. See also https://twitter.com/xexd/status/951977086331359232.
[47]
David G. Korn. Porting UNIX to Windows NT. In 1997 USENIX Annual Technical Conference, January 1997. URL https://www.usenix.org/legacy/publications/library/proceedings/ana97/korn.html.
[48]
Orran Krieger, Marc Auslander, Bryan Rosenburg, Robert W. Wisniewski, Jimi Xenidis, Dilma Da Silva, Michal Ostrowski, Jonathan Appavoo, Maria Butrico, Mark Mergen, Amos Waterland, and Volkmar Uhlig. K42: Building a complete operating system. In EuroSys Conference, pages 133--145. ACM, 2006. ISBN 1-59593-322-0.
[49]
Butler W. Lampson. SDS 940 lectures. June 1966. URL http://archive.computerhistory.org/resources/text/SDS/sds.lampson.SDS_940_lectures.1966.102634499.pdf.
[50]
SGX-LKL. Large-Scale Data & Systems Group, Imperial College London, 2018. URL https://github.com/lsds/sgx-lkl.
[51]
Ian Leslie, Derek McAuley, Richard Black, Timothy Roscoe, Paul Barham, David Evers, Robin Fairbairns, and Eoin Hyden. The design and implementation of an operating system to support distributed multimedia applications. IEEE Journal on Selected Areas in Communications, 14(7):1280--1297, September 1996.
[52]
Linux Programmer's Manual: unshare(2). Linux man-pages project, March 2019. URL http://man7.org/linux/man-pages/man2/unshare.2.html.
[53]
Anil Madhavapeddy, Richard Mortier, Charalampos Rotsos, David Scott, Balraj Singh, Thomas Gazagnaire, Steven Smith, Steven Hand, and Jon Crowcroft. Unikernels: Library operating systems for the cloud. In 18th International Conference on Architectural Support for Programming Languages and Operating Systems, pages 461--472. ACM, 2013. ISBN 978-1-4503-1870-9.
[54]
Windows API: CreateProcessW function. Microsoft, April 2018. URL https://docs.microsoft.com/en-us/windows/desktop/api/processthreadsapi/nf-processthreadsapi-createprocessw.
[55]
Greg Nakhimovsky. Minimizing memory usage for creating application subprocesses. Sun Microsystems, May 2006. URL https://www.oracle.com/technetwork/server-storage/solaris10/subprocess-136439.html.
[56]
Node.js. Issue 14917, 2018. URL https://github.com/nodejs/node/issues/14917.
[57]
Node.js. Issue 25382, 2019. URL https://github.com/nodejs/node/issues/25382.
[58]
Nvidia Developer Forum. CUDA and fork(), December 2007. URL https://devtalk.nvidia.com/default/topic/382954/cuda-programming-and-performance/cuda-and-fork-/.
[59]
Nvidia Developer Forum. Linux fork() and CUDA OOM possible bug, March 2009. URL https://devtalk.nvidia.com/default/topic/453458/linux-fork-and-cuda-oom-possible-bug-/.
[60]
Nvidia Developer Forum. (CUDA8.0 BUG?) Child process forked after cuInit() get CUDA_ERROR_NOT_INITIALIZED on cuInit(), October 2016. URL https://devtalk.nvidia.com/default/topic/973477/-cuda8-0-bug-child-process-forked-after-cuinit-get-cuda_error_not_initialized-on-cuinit-/.
[61]
Linus Nyman and Mikael Laakso. Notes on the history of fork and join. IEEE Annals of the History of Computing, 38(3):84--87, July 2016. ISSN 1058--6180.
[62]
Edward Oakes, Leon Yang, Dennis Zhou, Kevin Houck, Tyler Harter, Andrea Arpaci-Dusseau, and Remzi Arpaci-Dusseau. SOCK: Rapid task provisioning with serverless-optimized containers. In 2018 USENIX Annual Technical Conference, pages 57--70, 2018. ISBN 978-1-931971-44-7. URL https://www.usenix.org/conference/atc18/presentation/oakes.
[63]
Base Specifications POSIX. 1-2017. The Open Group, San Francisco, CA, USA, 2018. URL http://pubs.opengroup.org/onlinepubs/9699919799/functions/fork.html. IEEE Std 1003.1-2017.
[64]
Damian Pietras. Threads and fork(): think twice before mixing them. June 2009. URL https://www.linuxprogrammingblog.com/threads-and-fork-think-twice-before-using-them.
[65]
Donald E. Porter, Silas Boyd-Wickizer, Jon Howell, Reuben Olinsky, and Galen C. Hunt. Rethinking the library OS from the top down. In 16th International Conference on Architectural Support for Programming Languages and Operating Systems, pages 291--304. ACM, 2011. ISBN 978-1-4503-0266-1.
[66]
Python Project. Issue 27126, 2016. URL https://bugs.python.org/issue27126.
[67]
Redis FAQ: Background saving fails with a fork() error under Linux. Redis, 2018. URL https://redis.io/topics/faq.
[68]
Redis Persistence. Redis, 2018. URL https://redis.io/topics/persistence.
[69]
Dennis M. Ritchie. The evolution of the Unix time-sharing system. In Jeffrey M. Tobias, editor, Language Design and Programming Methodology, volume 79 of Lecture Notes in Computer Science, pages 25--35. Springer, 1980. ISBN 978-3-540-38579-0.
[70]
Dennis M. Ritchie and Ken Thompson. The UNIX time-sharing system. Communications of the ACM, 17(7):365--375, July 1974. ISSN 0001--0782.
[71]
SDS 940 Time-Sharing System Technical Manual. Scientific Data Systems, Santa Monica, CA, USA, November 1967. URL http://bitsavers.org/pdf/sds/9xx/940/901116A_940_TimesharingTechMan_Nov67.pdf. Publication number 90 11 16A.
[72]
Jonathan M. Smith and Gerald Q. Maguire, Jr. Effects of copy-on-write memory management on the response time of UNIX fork operations. Computing Systems: The Journal of the USENIX Association, 1 (3):255--278, 1988. URL https://www.usenix.org/legacy/publications/compsystems/1988/sum_smith.pdf.
[73]
Stack Overflow. printf anomaly after fork(), March 2010. URL https://stackoverflow.com/questions/2530663/printf-anomaly-after-fork.
[74]
Stack Overflow. CUDA initialization error after fork, April 2014. URL https://stackoverflow.com/questions/22950047/cuda-initialization-error-after-fork.
[75]
William Stallings. Operating Systems: Internals and Design Principles. Pearson, 6th edition, 2009. ISBN 978-0-13-603337-0.
[76]
W. Richard Stevens and Stephen A. Rago. Advanced Programming in the UNIX Environment. Addison Wesley, 3rd edition, 2013. ISBN 978-0-321-63773-4.
[77]
Multithreaded Programming Guide. Sun Microsystems, Santa Clara, CA, USA, 2002. URL https://docs.oracle.com/cd/E19683-01/806-6867/. Part number 806-6867-11.
[78]
Andrew S. Tanenbaum and Herbert Bos. Modern Operating Systems. Pearson, 4th edition, 2015. ISBN 978-0-13-359162-0.
[79]
Chia-Che Tsai, Donald E. Porter, and Mona Vij. Graphene-SGX: A practical library OS for unmodified applications on SGX. In 2017 USENIX Annual Technical Conference, pages 645--658. USENIX Association, 2017. ISBN 978-1-931971-38-6. URL https://www.usenix.org/conference/atc17/technical-sessions/presentation/tsai.
[80]
Ronald C. Unrau, Orran Krieger, Benjamin Gamsa, and Michael Stumm. Experiences with locking in a NUMA multiprocessor operating system kernel. In 1st USENIX Symposium on Operating Systems Design and Implementation, November 1994. URL https://www.usenix.org/legacy/publications/library/proceedings/osdi/unrau.html.
[81]
Tim Wilkinson, Ashley Saulsbury, Tom Stiemerling, and Kevin Murray. Compiling for a 64-bit single address space architecture. Technical Report TCU/SARC/1993/1, Systems Architecture Research Centre, City University, London, UK, 1993.
[82]
Wen Xu, Sanidhya Kashyap, Changwoo Min, and Taesoo Kim. Designing new operating primitives to improve fuzzing performance. In 2017 ACM Conference on Computer and Communications Security, pages 2313--2328. ACM, 2017. ISBN 978-1-4503-4946-8.

Cited By

View all
  • (2025)ESX: A Self-Generated Control Policy for Remote Access With SSH Based on eBPFIEEE Access10.1109/ACCESS.2024.345049613(6487-6506)Online publication date: 2025
  • (2025)MxKernel: A Bare-Metal Runtime System for Database Operations on Heterogeneous Many-Core HardwareScalable Data Management for Future Hardware10.1007/978-3-031-74097-8_5(117-143)Online publication date: 24-Jan-2025
  • (2024)Every mapping counts in large amountsProceedings of the 2024 USENIX Conference on Usenix Annual Technical Conference10.5555/3691992.3692069(1273-1282)Online publication date: 10-Jul-2024
  • Show More Cited By

Recommendations

Comments

Information & Contributors

Information

Published In

cover image ACM Conferences
HotOS '19: Proceedings of the Workshop on Hot Topics in Operating Systems
May 2019
227 pages
ISBN:9781450367271
DOI:10.1145/3317550
Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than the author(s) must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from Permissions@acm.org.

Sponsors

Publisher

Association for Computing Machinery

New York, NY, United States

Publication History

Published: 13 May 2019

Permissions

Request permissions for this article.

Check for updates

Qualifiers

  • Research-article
  • Research
  • Refereed limited

Conference

HotOS '19
Sponsor:

Upcoming Conference

HOTOS '25
Workshop on Hot Topics in Operating Systems
May 14 - 16, 2025
Banff , AB , Canada

Contributors

Other Metrics

Bibliometrics & Citations

Bibliometrics

Article Metrics

  • Downloads (Last 12 months)343
  • Downloads (Last 6 weeks)75
Reflects downloads up to 20 Feb 2025

Other Metrics

Citations

Cited By

View all
  • (2025)ESX: A Self-Generated Control Policy for Remote Access With SSH Based on eBPFIEEE Access10.1109/ACCESS.2024.345049613(6487-6506)Online publication date: 2025
  • (2025)MxKernel: A Bare-Metal Runtime System for Database Operations on Heterogeneous Many-Core HardwareScalable Data Management for Future Hardware10.1007/978-3-031-74097-8_5(117-143)Online publication date: 24-Jan-2025
  • (2024)Every mapping counts in large amountsProceedings of the 2024 USENIX Conference on Usenix Annual Technical Conference10.5555/3691992.3692069(1273-1282)Online publication date: 10-Jul-2024
  • (2024)Cloud-Native Database Systems and Unikernels: Reimagining OS Abstractions for Modern HardwareProceedings of the VLDB Endowment10.14778/3659437.365946217:8(2115-2122)Online publication date: 1-Apr-2024
  • (2024)Multiverse Notebook: Shifting Data Scientists to Time TravelersProceedings of the ACM on Programming Languages10.1145/36498388:OOPSLA1(754-783)Online publication date: 29-Apr-2024
  • (2023)Copy-on-Pin: The Missing Piece for Correct Copy-on-WriteProceedings of the 28th ACM International Conference on Architectural Support for Programming Languages and Operating Systems, Volume 210.1145/3575693.3575716(176-191)Online publication date: 27-Jan-2023
  • (2023)Nephele: Extending Virtualization Environments for Cloning Unikernel-based VMsProceedings of the Eighteenth European Conference on Computer Systems10.1145/3552326.3587454(574-589)Online publication date: 8-May-2023
  • (2023)DiLOS: Do Not Trade Compatibility for Performance in Memory DisaggregationProceedings of the Eighteenth European Conference on Computer Systems10.1145/3552326.3567488(266-282)Online publication date: 8-May-2023
  • (2023)Enabling Lightweight Privilege Separation in Applications with MicroGuardsApplied Cryptography and Network Security Workshops10.1007/978-3-031-41181-6_31(571-598)Online publication date: 4-Oct-2023
  • (2022)CCoW: Optimizing Copy-on-Write Considering the Spatial Locality in WorkloadsElectronics10.3390/electronics1103046111:3(461)Online publication date: 3-Feb-2022
  • Show More Cited By

Figures

Tables

Media

Share

Share

Share this Publication link

Share on social media

Get Access

Get Access

Login options

References

References

[1]
The BeBook: The Kernel Kit: load_image(). ACCESS Co., 1.0 edition, March 2008. URL https://www.haiku-os.org/legacy-docs/bebook/TheKernelKit_Images.html#load_image.
[2]
The BeBook: Threads and Teams. ACCESS Co., 1.0 edition, March 2008. URL https://www.haiku-os.org/legacy-docs/bebook/TheKernelKit_ThreadsAndTeams_Overview.html.
[3]
Mike Accetta, Robert Baron, William Bolosky, David Golub, Richard Rashid, Avadis Tevanian, and Michael Young. Mach: A new kernel foundation for UNIX development. In USENIX Summer Conference, pages 93--113, June 1986.
[4]
Thomas Anderson and Michael Dahlin. Operating Systems: Principles and Practice. Recursive Books, 2nd edition, 2014. ISBN 978-0-9856735-2-9.
[5]
Jonathan Appavoo, Dilma Da Silva, Orran Krieger, Marc Auslander, Michal Ostrowski, Bryan Rosenburg, Amos Waterland, Robert W. Wisniewski, Jimi Xenidis, Michael Stumm, and Livio Soares. Experience distributing objects in an SMMP OS. ACM Transactions on Computer Systems, 25(3), August 2007. ISSN 0734--2071.
[6]
Sergei Arnautov, Bohdan Trach, Franz Gregor, Thomas Knauth, Andre Martin, Christian Priebe, Joshua Lind, Divya Muthukumaran, Dan O'Keeffe, Mark L. Stillwell, David Goltzsche, Dave Eyers, Rüdiger Kapitza, Peter Pietzuch, and Christof Fetzer. SCONE: Secure Linux containers with Intel SGX. In 12th USENIX Symposium on Operating Systems Design and Implementation, pages 689--703. USENIX Association, 2016. ISBN 978-1-931971-33-1. URL https://www.usenix.org/conference/osdi16/technical-sessions/presentation/arnautov.
[7]
Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau. Operating Systems: Three Easy Pieces, chapter 5. Arpaci-Dusseau Books, 1.00 edition, March 2018. URL http://www.ostep.org/.
[8]
Vaggelis Atlidakis, Jeremy Andrus, Roxana Geambasu, Dimitris Mitropoulos, and Jason Nieh. POSIX abstractions in modern operating systems: The old, the new, and the missing. In EuroSys Conference, pages 19:1--19:17. ACM, 2016. ISBN 978-1-4503-4240-7.
[9]
Jean Bacon and Tim Harris. Operating Systems: Concurrent and Distributed Software Design. Addison Wesley, 2003. ISBN 0-321-11789-1.
[10]
Gaurav Banga and Jeffrey C. Mogul. Scalable kernel performance for Internet servers under realistic loads. In 1998 USENIX Annual Technical Conference. USENIX Association, 1998. URL https://www.usenix.org/legacy/publications/library/proceedings/usenix98/banga.html.
[11]
Amnon Barak, Shai Guday, and Richard G. Wheeler. The MOSIX Distributed Operating System: Load Balancing for UNIX. Springer-Verlag Berlin Heidelberg, 1993.
[12]
Dotan Barak. Libibverbs Programmer's Manual: ibv_fork_init(3), October 2006. URL https://github.com/linux-rdma/rdma-core/blob/master/libibverbs/man/ibv_fork_init.3.md.
[13]
Andrew Baumann, Paul Barham, Pierre-Evariste Dagand, Tim Harris, Rebecca Isaacs, Simon Peter, Timothy Roscoe, Adrian Schuepbach, and Akhilesh Singhania. The multikernel: a new OS architecture for scalable multicore systems. In 22nd ACM Symposium on Operating Systems Principles. ACM, October 2009.
[14]
Andrew Baumann, Marcus Peinado, and Galen Hunt. Shielding applications from an untrusted cloud with Haven. In 11th USENIX Symposium on Operating Systems Design and Implementation, pages 267--283, October 2014. ISBN 978-1-931971-16-4. URL https://www.usenix.org/conference/osdi14/technical-sessions/presentation/baumann.
[15]
2.9.1 BSD System Calls Manual: vfork(2). Berkeley Software Distribution, Berkeley, CA, USA, 1983. URL https://www.freebsd.org/cgi/man.cgi?query=vfork&manpath=2.9.1+BSD.
[16]
Andrea Bittau. Toward Least-Privilege Isolation for Software. PhD thesis, Department of Computer Science, University College London, November 2009. URL http://www.scs.stanford.edu/~sorbo/bittau-phd.pdf.
[17]
Andrea Bittau, Adam Belay, Ali Mashtizadeh, David Mazières, and Dan Boneh. Hacking blind. In IEEE Symposium on Security and Privacy, pages 227--242. IEEE Computer Society, 2014. ISBN 978-1-4799-4686-0.
[18]
Daniel G. Bobrow, Jerry D. Burchfiel, Daniel L. Murphy, and Raymond S. Tomlinson. TENEX, a paged time sharing system for the PDP-10. In 3rd ACM Symposium on Operating Systems Principles. ACM, 1971.
[19]
TENEX JSYS Manual. Bolt Beranek and Newman, Cambridge, MA, USA, 2nd edition, September 1973. URL http://www.bitsavers.org/pdf/bbn/tenex/TenexJSYSMan_Sep73.pdf.
[20]
TENEX 1.33 source code, CFORK system call. Bolt Beranek and Newman, 1975. URL https://github.com/PDP-10/tenex/blob/master/133-tenex/forks.mac#L208.
[21]
Bob Boothe. Efficient algorithms for bidirectional debugging. In ACM SIGPLAN Conference on Programming Language Design and Implementation, pages 299--310. ACM, 2000. ISBN 1-58113-199-2.
[22]
Silas Boyd-Wickizer, M. Frans Kaashoek, Robert Morris, and Nickolai Zeldovich. OpLog: a library for scaling update-heavy data structures. Technical Report MIT-CSAIL-TR-2014-019, MIT CSAIL, September 2014. URL http://hdl.handle.net/172L1/89653.
[23]
Jeffrey S. Chase, Henry M. Levy, Michael J. Feeley, and Edward D. Lazowska. Sharing and protection in a single-address-space operating system. ACM Transactions on Computer Systems, 12(4):271--307, November 1994. ISSN 0734--2071.
[24]
Chromium Project. Bug 36678, 2010. URL https://crbug.com/36678.
[25]
Chromium Project. Bug 56596, 2010. URL https://crbug.com/56596.
[26]
Chromium Project. Bug 177218, 2013. URL https://crbug.com/177218.
[27]
Chromium Project. Bug 856535, 2018. URL https://crbug.com/856535.
[28]
Chromium Project. Bug 819228, 2018. URL https://crbug.com/819228.
[29]
Austin T. Clements, M. Frans Kaashoek, Nickolai Zeldovich, Robert T. Morris, and Eddie Kohler. The scalable commutativity rule: Designing scalable software for multicore processors. ACM Transactions on Computer Systems, 32(4):10:1--10:47, January 2015. ISSN 0734--2071.
[30]
OpenVMS System Services Reference Manual: $CREPRC. Compaq Computer Corporation, Houston, TX, USA, April 2001. URL http://h30266.www3.hpe.com/odl/vax/opsys/vmsos73/vmsos73/4527/4527pro_018.html#jun_147. Document number ZK4527.
[31]
Cygwin 2.11 User's Guide. Cygwin, November 2018. URL https://cygwin.com/cygwin-ug-net/highlights.html#ov-hi-process.
[32]
Casper Dik. posix_spawn() as an actual system call. Oracle Solaris Blog, February 2018. URL https://blogs.oracle.com/solaris/posix_spawn-as-an-actual-system-call.
[33]
D. Eastlake, R. Greenblatt, J. Holloway, T. Knight, and S. Nelson. ITS 1.5 Refereence Manual. MIT Artificial Intelligence Laboratory, Cambridge, MA, USA, July 1969. URL https://hdl.handle.net/172L1/6165. Memo number AIM-161A.
[34]
Rich Felker. vfork considered dangerous. October 2012. URL https://ewontfix.com/7.
[35]
Greg Gagne, Abraham Silberschatz, and Peter B. Galvin. Operating Systems Concepts. John Wiley & Sons, 9th edition, 2012. ISBN 978-1-118-06333-0.
[36]
Ben Gamsa, Orran Krieger, Jonathan Appavoo, and Michael Stumm. Tornado: Maximizing locality and concurrency in a shared memory multiprocessor operating system. In 3rd USENIX Symposium on Operating Systems Design and Implementation, February 1999. URL https://www.usenix.org/legacy/events/osdi99/gamsa.html.
[37]
GNOME Project. Merge request 95, 2018. URL https://gitlab.gnome.org/GNOME/glib/merge_requests/95.
[38]
GNU C Library. Bug 10354, 2016. URL https://sourceware.org/bugzilla/show_bug.cgi?id=10354.
[39]
Android Developer Documentation: Overview of memory management. Google, 2018. URL https://developer.android.com/topic/performance/memory-overview#SharingRAM.
[40]
Gernot Heiser and Kevin Elphinstone. L4 microkernels: The lessons from 20 years of research and deployment. ACM Transactions on Computer Systems, 34(1):1:1--1:29, April 2016. ISSN 0734--2071.
[41]
Gernot Heiser, Kevin Elphinstone, Jerry Vochteloo, Stephen Russell, and Jochen Liedtke. The Mungi single-address-space operating system. Software, Practice and Experience, 28(9):901--928, 1998.
[42]
Jon Howell, Bryan Parno, and John R. Douceur. How to run POSIX apps in a minimal picoprocess. In 2013 USENIX Annual Technical Conference, pages 321--332. USENIX Association, 2013. URL https://www.usenix.org/conference/atc13/technical-sessions/presentation/howell.
[43]
M. Frans Kaashoek, Dawson R. Engler, Gregory R. Ganger, Hector M. Briceño, Russell Hunt, David Mazières, Thomas Pinckney, Robert Grimm, John Jannotti, and Kenneth Mackenzie. Application performance and flexibility on exokernel systems. In 16th ACM Symposium on Operating Systems Principles, pages 52--65, 1997. ISBN 0-89791-916-5.
[44]
Antti Kantee. On rump kernels and the Rumprun unikernel, August 2015. URL https://xenproject.org/2015/08/06/on-rump-kernels-and-the-rumprun-unikernel/.
[45]
Avi Kivity, Dor Laor, Glauber Costa, Pekka Enberg, Nadav Har'El, Don Marti, and Vlad Zolotarov. OSv---optimizing the operating system for virtual machines. In 2014 USENIX Annual Technical Conference, pages 61--72, 2014. ISBN 978-1-931971-10-2. URL https://www.usenix.org/conference/atc14/technical-sessions/presentation/kivity.
[46]
Eddie Kohler. Harvard University CS 61 problem set 4: WeensyOS, October 2018. URL https://cs61.seas.harvard.edu/site/2018/WeensyOS/. See also https://twitter.com/xexd/status/951977086331359232.
[47]
David G. Korn. Porting UNIX to Windows NT. In 1997 USENIX Annual Technical Conference, January 1997. URL https://www.usenix.org/legacy/publications/library/proceedings/ana97/korn.html.
[48]
Orran Krieger, Marc Auslander, Bryan Rosenburg, Robert W. Wisniewski, Jimi Xenidis, Dilma Da Silva, Michal Ostrowski, Jonathan Appavoo, Maria Butrico, Mark Mergen, Amos Waterland, and Volkmar Uhlig. K42: Building a complete operating system. In EuroSys Conference, pages 133--145. ACM, 2006. ISBN 1-59593-322-0.
[49]
Butler W. Lampson. SDS 940 lectures. June 1966. URL http://archive.computerhistory.org/resources/text/SDS/sds.lampson.SDS_940_lectures.1966.102634499.pdf.
[50]
SGX-LKL. Large-Scale Data & Systems Group, Imperial College London, 2018. URL https://github.com/lsds/sgx-lkl.
[51]
Ian Leslie, Derek McAuley, Richard Black, Timothy Roscoe, Paul Barham, David Evers, Robin Fairbairns, and Eoin Hyden. The design and implementation of an operating system to support distributed multimedia applications. IEEE Journal on Selected Areas in Communications, 14(7):1280--1297, September 1996.
[52]
Linux Programmer's Manual: unshare(2). Linux man-pages project, March 2019. URL http://man7.org/linux/man-pages/man2/unshare.2.html.
[53]
Anil Madhavapeddy, Richard Mortier, Charalampos Rotsos, David Scott, Balraj Singh, Thomas Gazagnaire, Steven Smith, Steven Hand, and Jon Crowcroft. Unikernels: Library operating systems for the cloud. In 18th International Conference on Architectural Support for Programming Languages and Operating Systems, pages 461--472. ACM, 2013. ISBN 978-1-4503-1870-9.
[54]
Windows API: CreateProcessW function. Microsoft, April 2018. URL https://docs.microsoft.com/en-us/windows/desktop/api/processthreadsapi/nf-processthreadsapi-createprocessw.
[55]
Greg Nakhimovsky. Minimizing memory usage for creating application subprocesses. Sun Microsystems, May 2006. URL https://www.oracle.com/technetwork/server-storage/solaris10/subprocess-136439.html.
[56]
Node.js. Issue 14917, 2018. URL https://github.com/nodejs/node/issues/14917.
[57]
Node.js. Issue 25382, 2019. URL https://github.com/nodejs/node/issues/25382.
[58]
Nvidia Developer Forum. CUDA and fork(), December 2007. URL https://devtalk.nvidia.com/default/topic/382954/cuda-programming-and-performance/cuda-and-fork-/.
[59]
Nvidia Developer Forum. Linux fork() and CUDA OOM possible bug, March 2009. URL https://devtalk.nvidia.com/default/topic/453458/linux-fork-and-cuda-oom-possible-bug-/.
[60]
Nvidia Developer Forum. (CUDA8.0 BUG?) Child process forked after cuInit() get CUDA_ERROR_NOT_INITIALIZED on cuInit(), October 2016. URL https://devtalk.nvidia.com/default/topic/973477/-cuda8-0-bug-child-process-forked-after-cuinit-get-cuda_error_not_initialized-on-cuinit-/.
[61]
Linus Nyman and Mikael Laakso. Notes on the history of fork and join. IEEE Annals of the History of Computing, 38(3):84--87, July 2016. ISSN 1058--6180.
[62]
Edward Oakes, Leon Yang, Dennis Zhou, Kevin Houck, Tyler Harter, Andrea Arpaci-Dusseau, and Remzi Arpaci-Dusseau. SOCK: Rapid task provisioning with serverless-optimized containers. In 2018 USENIX Annual Technical Conference, pages 57--70, 2018. ISBN 978-1-931971-44-7. URL https://www.usenix.org/conference/atc18/presentation/oakes.
[63]
Base Specifications POSIX. 1-2017. The Open Group, San Francisco, CA, USA, 2018. URL http://pubs.opengroup.org/onlinepubs/9699919799/functions/fork.html. IEEE Std 1003.1-2017.
[64]
Damian Pietras. Threads and fork(): think twice before mixing them. June 2009. URL https://www.linuxprogrammingblog.com/threads-and-fork-think-twice-before-using-them.
[65]
Donald E. Porter, Silas Boyd-Wickizer, Jon Howell, Reuben Olinsky, and Galen C. Hunt. Rethinking the library OS from the top down. In 16th International Conference on Architectural Support for Programming Languages and Operating Systems, pages 291--304. ACM, 2011. ISBN 978-1-4503-0266-1.
[66]
Python Project. Issue 27126, 2016. URL https://bugs.python.org/issue27126.
[67]
Redis FAQ: Background saving fails with a fork() error under Linux. Redis, 2018. URL https://redis.io/topics/faq.
[68]
Redis Persistence. Redis, 2018. URL https://redis.io/topics/persistence.
[69]
Dennis M. Ritchie. The evolution of the Unix time-sharing system. In Jeffrey M. Tobias, editor, Language Design and Programming Methodology, volume 79 of Lecture Notes in Computer Science, pages 25--35. Springer, 1980. ISBN 978-3-540-38579-0.
[70]
Dennis M. Ritchie and Ken Thompson. The UNIX time-sharing system. Communications of the ACM, 17(7):365--375, July 1974. ISSN 0001--0782.
[71]
SDS 940 Time-Sharing System Technical Manual. Scientific Data Systems, Santa Monica, CA, USA, November 1967. URL http://bitsavers.org/pdf/sds/9xx/940/901116A_940_TimesharingTechMan_Nov67.pdf. Publication number 90 11 16A.
[72]
Jonathan M. Smith and Gerald Q. Maguire, Jr. Effects of copy-on-write memory management on the response time of UNIX fork operations. Computing Systems: The Journal of the USENIX Association, 1 (3):255--278, 1988. URL https://www.usenix.org/legacy/publications/compsystems/1988/sum_smith.pdf.
[73]
Stack Overflow. printf anomaly after fork(), March 2010. URL https://stackoverflow.com/questions/2530663/printf-anomaly-after-fork.
[74]
Stack Overflow. CUDA initialization error after fork, April 2014. URL https://stackoverflow.com/questions/22950047/cuda-initialization-error-after-fork.
[75]
William Stallings. Operating Systems: Internals and Design Principles. Pearson, 6th edition, 2009. ISBN 978-0-13-603337-0.
[76]
W. Richard Stevens and Stephen A. Rago. Advanced Programming in the UNIX Environment. Addison Wesley, 3rd edition, 2013. ISBN 978-0-321-63773-4.
[77]
Multithreaded Programming Guide. Sun Microsystems, Santa Clara, CA, USA, 2002. URL https://docs.oracle.com/cd/E19683-01/806-6867/. Part number 806-6867-11.
[78]
Andrew S. Tanenbaum and Herbert Bos. Modern Operating Systems. Pearson, 4th edition, 2015. ISBN 978-0-13-359162-0.
[79]
Chia-Che Tsai, Donald E. Porter, and Mona Vij. Graphene-SGX: A practical library OS for unmodified applications on SGX. In 2017 USENIX Annual Technical Conference, pages 645--658. USENIX Association, 2017. ISBN 978-1-931971-38-6. URL https://www.usenix.org/conference/atc17/technical-sessions/presentation/tsai.
[80]
Ronald C. Unrau, Orran Krieger, Benjamin Gamsa, and Michael Stumm. Experiences with locking in a NUMA multiprocessor operating system kernel. In 1st USENIX Symposium on Operating Systems Design and Implementation, November 1994. URL https://www.usenix.org/legacy/publications/library/proceedings/osdi/unrau.html.
[81]
Tim Wilkinson, Ashley Saulsbury, Tom Stiemerling, and Kevin Murray. Compiling for a 64-bit single address space architecture. Technical Report TCU/SARC/1993/1, Systems Architecture Research Centre, City University, London, UK, 1993.
[82]
Wen Xu, Sanidhya Kashyap, Changwoo Min, and Taesoo Kim. Designing new operating primitives to improve fuzzing performance. In 2017 ACM Conference on Computer and Communications Security, pages 2313--2328. ACM, 2017. ISBN 978-1-4503-4946-8.