skip to main content
research-article
Open Access

Surviving software dependencies

Published:21 August 2019Publication History
Skip Abstract Section

Abstract

Software reuse is finally here but comes with risks.

References

  1. Baldwin, A. Details about the event-stream incident. The npm Blog (Nov. 2018); https://bit.ly/2DRjySJGoogle ScholarGoogle Scholar
  2. Cox, R. Go & Versioning, 2018; https://research.swtch.com/vgo.Google ScholarGoogle Scholar
  3. Cox, R. The principles of versioning in Go. GopherCon Singapore (May 2018); https://www.youtube.com/watch?v=F8nrpe0XWRg.Google ScholarGoogle Scholar
  4. Cox, R. RE2: A principled approach to regular expression matching. Google Open Source Blog (Mar. 2010); https://bit.ly/2XoLFzC.Google ScholarGoogle Scholar
  5. Cox, R. Regular expression matching with a trigram index or how Google Code Search worked. Swtch.com (Jan. 2012); https://swtch.com/~rsc/regexp/regexp4.html.Google ScholarGoogle Scholar
  6. Facebook. Infer: A tool to detect bugs in Java and C/ C++/Objective-C code before it ships; https://fbinfer.com/.Google ScholarGoogle Scholar
  7. GNU Project. GNU General Public License, version 1, 1989; https://www.gnu.org/licenses/old-licenses/gpl-1.0.html.Google ScholarGoogle Scholar
  8. Go Project. Go 1 and the future of Go programs, 2013; https://golang.org/doc/go1compat.Google ScholarGoogle Scholar
  9. Google Open Source. Using third-party licenses; https://opensource.google.com/docs/thirdparty/licenses/#banned.Google ScholarGoogle Scholar
  10. Hipp, D. R. How SQLite is tested; https://www.sqlite.org/testing.html.Google ScholarGoogle Scholar
  11. Lacasse, N., Open-sourcing gVisor, a sandboxed container runtime. Google Cloud (May 2018); http://bit.ly/2wzA84D.Google ScholarGoogle Scholar
  12. Langley, A. Chromium's seccomp sandbox. ImperialViolet (Aug. 2009); https://www.imperialviolet.org/2009/08/26/seccomp.html.Google ScholarGoogle Scholar
  13. National Institute of Standards and Technology. National Vulnerability Database---Search and Statistics; https://nvd.nist.gov/vuln/search.Google ScholarGoogle Scholar
  14. Pike, R. Go Proverbs, 2015; https://go-proverbs.github.io/.Google ScholarGoogle Scholar
  15. Pike, R., Dorward, S., Griesemer, R. and Quinlan, S. Interpreting the data: Parallel analysis with Sawzall. Scientific Programming J. 13, 4 (2005), 277--298 Google ScholarGoogle ScholarDigital LibraryDigital Library
  16. Potapenko, A. Testing Chromium: ThreadSanitizer v2, a next-gen data race detector. Chromium Blog (Apr. 2014); http://bit.ly/2WN29o0.Google ScholarGoogle Scholar
  17. Potvin, R., Levenberg, J. Why Google stores billions of lines of code in a single repository. Commun. ACM 59, 7 (July 2016), 78--87 Google ScholarGoogle ScholarDigital LibraryDigital Library
  18. Reis, C. Multi-process architecture. Chromium Blog (Sept. 2008); https://blog.chromium.org/2008/09/multi-process-architecture.html.Google ScholarGoogle Scholar
  19. SpotBugs: Find bugs in Java programs; https://spotbugs.github.io/.Google ScholarGoogle Scholar
  20. Thompson, K. Reflections on trusting trust. Commun. ACM 27, 8 (Aug. 1984), 761--763 Google ScholarGoogle ScholarDigital LibraryDigital Library
  21. U.S. House of Representatives Committee on Oversight and Government Reform. The Equifax Data Breach, Majority Staff Report, 115th Congress (Dec. 2018); http://bit.ly/2Gf53IJ.Google ScholarGoogle Scholar
  22. Willis, N. A single Node of failure. LWN.net (Mar. 2016); https://lwn.net/Articles/681410/.Google ScholarGoogle Scholar
  23. Winters, T. SD-8: Standard library compatibility, C++ standing document, 2018; http://bit.ly/2QNhT5k.Google ScholarGoogle Scholar

Index Terms

  1. Surviving software dependencies

        Recommendations

        Reviews

        Anthony Joseph Duben

        Software has been reused since the days of exchanging decks of punched cards wrapped in listings printed on green bar paper. Packages (that is, libraries) of code are everywhere and are used in an overwhelming number of applications. Starting with a blank screen and writing a major self-contained program is a rarity. Since software reuse is commonplace, the correctness, ability to be understood, security, and robustness of the software package used are paramount. Depending on a package with uncritical trust is dangerous. Russ Cox shows how one can intelligently and cautiously gain and maintain control of potential problems arising from dependencies on imported software packages. He identifies several considerations in examining a package intended to be incorporated in a project: design (especially the quality of documentation), quality of the code, testing protocols distributed with the package, bug reports and fixes, maintenance, usage, security, licensing, and indirect dependencies to still other packages. He recommends several measures to gain control of dependencies: testing them alone and in competition with other packages offering the same capabilities, abstracting the dependency to limit the direct invocation of features peculiar to the package (to make substituting other packages easier), isolating the package at runtime, avoiding the dependency by copying code directly (when legal), and anticipating the problems that may arise when packages are upgraded. In short: inspect, analyze, test, and repeat. Trust, but verify.

        Access critical reviews of Computing literature here

        Become a reviewer for Computing Reviews.

        Comments

        Login options

        Check if you have access through your login credentials or your institution to get full access on this article.

        Sign in

        Full Access

        • Published in

          cover image Communications of the ACM
          Communications of the ACM  Volume 62, Issue 9
          September 2019
          95 pages
          ISSN:0001-0782
          EISSN:1557-7317
          DOI:10.1145/3358415
          Issue’s Table of Contents

          Copyright © 2019 Owner/Author

          This work is licensed under a Creative Commons Attribution International 4.0 License.

          Publisher

          Association for Computing Machinery

          New York, NY, United States

          Publication History

          • Published: 21 August 2019

          Permissions

          Request permissions about this article.

          Request Permissions

          Check for updates

          Qualifiers

          • research-article
          • Popular
          • Refereed

        PDF Format

        View or Download as a PDF file.

        PDF

        eReader

        View online with eReader.

        eReader

        HTML Format

        View this article in HTML Format .

        View HTML Format