하드웨어 발전이나 단순한 제품 통합을 제외하고, 역사적으로 가장 널리 쓰이고 중요한 소프트웨어 기술 혁신들을 기준과 함께 정리하고 소프트웨어 특허 및 혁신이 아닌 것들을 논의한다.
너무 많은 사람들이 소프트웨어 혁신을 컴퓨터 및 네트워크 하드웨어의 속도 증가 같은 다른 요인들과 혼동한다. 이 글은 하드웨어의 발전과, 중요한 새로운 소프트웨어 혁신을 담고 있지 않은 제품들을 제외한 뒤, 소프트웨어에서 가장 중요한 혁신들을 식별함으로써 그 혼동을 끝내려 한다. 이 글은 가장 중요한 소프트웨어 혁신을 위한 기준과 출처, 소프트웨어 혁신들 자체을 제시하고, 소프트웨어 특허와 중요한 소프트웨어 혁신이 아닌 것을 논의한 다음, 결론으로 마무리한다.
결과는 당신을 놀라게 할지도 모른다.
이 글은 “가장 중요한 소프트웨어 혁신”을 나열하므로, 먼저 그 단어들이 각각 무엇을 뜻하는지 분명히 해야 한다:
나는 의도적으로 컴퓨터 하드웨어 혁신이나 소프트웨어 혁신을 수반하지 않는 주요 하드웨어 사건을 제외한다. 사람들은 하드웨어와 소프트웨어를 자주 혼동하므로, 하드웨어를 의도적으로 포함하지 않으면 그렇지 않으면 보이지 않는 다른(그리고 흥미로운) 그림이 나온다. 예를 들어 1973년의 한 법원 판결은 John Vincent Atanasoff가 전자식 디지털 컴퓨터의 법적 발명가라고 결정했지만, 그것은 하드웨어 혁신이므로 포함하지 않는다. 나는 트랜지스터(1947), 집적회로(1958) 같은 다른 순수 하드웨어 혁신들도 제외했다. 같은 이유로 Bob Metcalfe가 1973년에 개발한 Ethernet도 제외했다(Ethernet은 초기 Internet Protocol 소프트웨어를 사용했으므로, 소프트웨어 아이디어는 이미 존재했다).
또한 소프트웨어 기술에 중요하거나 널리 퍼져 있더라도, 진정한 기술적 발명이 아닌 것(예: 사회적 또는 법적 혁신)도 제외했다. 예를 들어 copylefting 라이선스 개념은 수정을 허용하면서도 소프트웨어가 독점 소프트웨어가 되는 것을 금지하는 혁신적인 소프트웨어 라이선싱 접근법이며, General Public License (GPL)을 통해 방대한 소프트웨어에서 사용된다. 최초의 진정한 copylefting 라이선스(Emacs Public License)는 Richard Stallman이 1985년에 개발했지만, copyleft는 기술적 발명이라기보다 사회적·법적 발명이므로 이 목록에는 포함하지 않는다. 또한 “스마일리” 표시 :-)도 포함하지 않는다. 확실히 널리 쓰이지만, 기술적 발명이 아니라 사회적 발명이기 때문이다.
그 결과, 컴퓨팅 역사에서 이 목록에 없는 사건이 얼마나 많은지에 놀랄지도 모른다. 대부분의 소프트웨어 제품은 그 자체로 소프트웨어 혁신이 아니다. 대부분의 제품은 다른 아이디어의 재구현이기 때문이다. 예를 들어 WordStar는 최초의 마이크로프로세서 워드프로세서였지만, 최초의 워드프로세서는 아니었다. WordStar는 단지 다른 컴퓨터에서의 이전 제품을 재구현한 것이다. 이후의 워드프로세서(Word Perfect, Microsoft Word 등)도 다른 업체가 만든 이후의 재구현이지, 그 자체로 혁신은 아니다. 컴퓨팅의 주요 사건들 중 일부는 단지 하드웨어 제품 발표이며, 소프트웨어 혁신과는 무관하다. 따라서 IBM PC와 Apple ][의 등장은 컴퓨팅 세계에 중요했지만, 소프트웨어 혁신을 나타내지는 않았다. 그것들은 단지 더 저렴한 하드웨어였고, 그 위의 소프트웨어는 당시 이미 잘 알려진 기법으로 작성되었다.
가끔 제품이 혁신의 최초 등장인 경우(예: 최초의 스프레드시트 프로그램)가 있는데, 그 경우 제품 출시 날짜가 대중에게 아이디어가 발표된 날짜가 된다. 어떤 혁신은 소프트웨어 사용자에게 직접 보이지 않지만 소프트웨어 개발에 엄청난 영향을 주는 혁신적 기법(예: 서브루틴과 객체지향)이며, 이런 것들은 이 소프트웨어 혁신 목록에 포함된다. 논쟁의 여지가 큰 항목들에 대해서는, 왜 포함되어야 한다고 믿는지 설명하려고 노력했다.
Matt Ridley의 How Innovation Works (and Why it Flourishes in Freedom) (2020)은 발명과 혁신에 관한 흥미로운 책이다. Ridley는 혁신을 “에너지를 적용해 불가능해 보이는 것들을 만들어내는 새로운 방법을 찾고, 그것들이 받아들여지게 하는 것… 충분히 실용적이고, 저렴하고, 신뢰할 수 있고, 어디에나 있을 만큼 널리 퍼져서 사용할 가치가 있게 될 때까지 발명을 발전시키는 것… [그리고] 새로운 아이디어를 적용해 생활 수준을 높이는 것”(4쪽)으로 정의한다. Ridley는 역사를 통틀어 발명과 혁신을 훑는다. 이 글은 그 관점에서 적용되어 중요한 혁신이 된 핵심 소프트웨어 발명들에 초점을 맞춘다. Ridley는 역사 속 여러 혁신(그의 용어)을 언급하며 “대부분의 혁신은 점진적인 과정”(9쪽 및 240쪽+)이라고도 말한다. 또한 단지 아이디어를 생각해낸 사람이 아니라 “비용을 낮추고 제품을 단순화하는 방법을 찾아낸 사람들이 가장 큰 차이를 만든다”(246쪽)고 주장한다. 그는 “혁신의 주된 성분은 자유”(359쪽)라고도 주장한다. 그의 용어는 이 글의 용어와 완전히 같지는 않지만, 연결점은 충분히 분명하다고 생각한다.
나는 어떤 제품으로 구현된 시점이 아니라, 아이디어가 처음으로 공개적으로 발표된 시점을 식별하고 날짜를 매기려고 했다. 최초 구현과 최초의 광범위한 구현도 종종 함께 적었다. 여기서 “공개”란, 적어도 조직 간에 널리 퍼지는 청중을 대상으로 한 발표를 뜻한다. 어떤 경우에는 특정 날짜나 사건을 식별하기가 어렵다. 더 이른 작업에 대한 참고를 환영한다. 예를 들어, 때로는 많은 사람들의 행위를 통해 아이디어가 점진적으로 형성되기 때문에 “최초”를 식별하기가 어렵다.
가장 중요한 컴퓨팅 혁신이 무엇인지에 대한 어떤 합의도 찾지 못했기 때문에, 나는 여러 다른 출처에서 사건들을 선택해 이 목록을 만들었다. 중요한 것을 놓치지 않기 위해 많은 출처를 사용했으며, 특히 IEEE Computer의 역사 정보(그들의 50-year timeline) 포함), Virtual Museum of Computing, Hobbes’ Internet Timeline, Paul E. Ceruzzi의 A History of Modern Computing, John Naughton의 _A Brief History of the Future_를 사용했다. 또한 몇몇 경우 Janet Abbate의 _Inventing the Internet_도 사용했지만, (불행히도) Abbate가 여러 오류를 포함하고 있어 출처로서 의심스럽기 때문에 그 내용은 가능한 한 재검증하려 했다. 예를 들어 Abbate(22쪽)는 Strachey와 John McCarthy가 같은 단어(“time-sharing”)를 사용했지만 그 의미는 전혀 같지 않았다는 사실을 이해하지 못한다. 또한 Abbate(201쪽)는 Steve Bellovin이 Duke에 있었다고 주장하지만 이는 틀렸다. James Durham의 History-Making Components와 A History and Future of Computing 같은 다른 출처도 검토했다. 일반적으로 이런 출처들은 컴퓨터 하드웨어와 소프트웨어를 섞어 다룬다는 점을 유의하라. 또 다른 출처는 Software Design and Management가 후원한 “Software Pioneers” 컨퍼런스(2001년 6월 28-29일, Bonn)다. Peter H. Salus의 “OSI and TCP: A History” 같은 많은 구체적 출처도 확인했다. Association for Computing Machinery (ACM) Software Systems Award도 도움이 되었지만, 이는 영향력 있는 소프트웨어 시스템의 개발자에게 상을 수여한다. 수상자들은 확실히 훌륭하지만, 많은 경우 영향력 있는 소프트웨어 시스템은 새로운 아이디어의 최초 구현이라기보다 이미 존재하던 아이디어의 훌륭한 공학과 정교화의 결과다. 뒤에서 더 논의하듯, 우리는 _혁신_과 _중요한 제품_을 구분해야 한다. 제품은 혁신적이지 않더라도 중요하거나 유용할 수 있다.
컴퓨팅 역사가 흥미롭다면, 여기의 자료로서 중요한 출처는 아니지만 20 Year Usenet Timeline, Brief History of Hackerdom, Landley’s Computer history page도 즐길 수 있을 것이다.
혁신들을 식별하기 시작한 뒤, 많은 사람들이 소프트웨어 특허에 대해 물었다. 적용 가능한 특허를 찾기 위해 할 수 있는 일을 했지만, 문제는 끝이 없다. 소프트웨어 특허는 소프트웨어 전문가에게도 종종 이해 불가능하다. 검색 시스템은 관련 소프트웨어 특허를 모두 찾지 못한다. 약물과 달리 소프트웨어 특허나 소프트웨어 아이디어 일반에 대한 좋은 색인 체계가 없기 때문이다(같은 아이디어를 서로 다른 말로 표현할 수 있다). 특허를 찾을 수 없다는 점은 많은 다른 문제를 낳는다. 소프트웨어 특허는 선행기술이 있음에도 불구하고 종종 부여된다(원래는 그러면 안 된다). 실제로 누군가가(몇 년 뒤에라도) 어떤 아이디어를 듣고 소프트웨어 특허를 출원하면, 특허청이 이를 부여할 가능성이 높다. 특허청은 이미 특허가 있는 것에 대해서도 소프트웨어 특허를 부여할 수 있다.
하지만 소프트웨어 특허에 대한 진짜 질문이 “특허가 소프트웨어 혁신에 대한 유인을 제공하는가”라면, 상황은 단순해질 수 있다. 그것이 사실이라면 (a) 혁신가(또는 그의 회사)가 특허를 출원했을 것이고, (b) 그것은 원래의 혁신에 대응하는 형태였을 것이며, (c) 그는 법적 유예기간(공개된 날로부터 12개월) 내에 출원했을 것이라고 합리적으로 추정할 수 있다. 또한 일반적으로 1980년 이전에는 소프트웨어에 대해 특허가 부여되지 않았다. 이런 통찰에 대해 Jim Bessen에게 감사한다. 이런 요소들은 특허 검색을 훨씬 다루기 쉽게 해 주며, 예를 들어 Google의 고급 특허 검색을 사용할 수 있다. 이러한 핵심 혁신들에 대한 관련 특허를 찾기 위해 특허 검색을 도와준 Jim Bessen을 포함한 많은 분들에게 감사한다. 발견된 경우 이 글은 미국 특허 번호를 식별한다. 어떤 특허가 식별되지 않았다면, 사람들이 찾아보았지만 그럴듯하게 유효한 특허를 찾지 못했다는 뜻이다. 소프트웨어 특허 섹션에서 이를 더 논의한다.
이 글이 처음 출판된 이후, 이 글을 보완해 준 여러 추가 제안을 받았다. 그 제안을 제공해 준 분들께 감사한다. 여전히 몇몇 중요한 혁신이 빠져 있을 가능성이 충분히 있다. 수정이나 추가가 있다면 연락해 달라 (dwheeler, at dwheeler.com, 스팸은 사절).
다음은 가장 중요한 소프트웨어 혁신들의 목록이다:
| Year | Innovation | Comments |
|---|---|---|
| 1837 | 소프트웨어 (Babbage의 해석기관) | Charles Babbage는 저명한 과학자였으며, 그는 1828년에 Cambridge의 Lucasian Professor of Mathematics로 선출되었다(그 자리는 Isaac Newton과 Stephen Hawking이 맡았던 것과 같은 자리다). 1837년에 그는 _해석기관(analytical engine)_을 공개적으로 설명했는데, 이는 하나의 작업만 수행하도록 설계된 기계가 아니라, 프로그램으로부터 명령을 받아 동작하는 기계 장치였다. Babbage는 그 이전부터 한동안 이 문제를 생각해 왔던 것으로 보이며, 많은 혁신이 그렇듯 하나의 날짜를 특정하기는 어렵다. 이는 소프트웨어(기계 장치를 위한 계산 명령)라는 개념이 진지하게 숙고된 최초의 사례로 보인다. Babbage는 명령을 재사용할 수 있다는 점(오늘날 소프트웨어가 동작하는 방식의 핵심 개념)을 언급하기도 했다. 1842년에 Ada Augusta, Countess of Lovelace는 “Sketch of the Analytical Engine”의 번역본을 자신의 광범위한 주석과 함께 발표했다. 그 주석은 오늘날에도 상당히 알아볼 수 있는 컴퓨터 아키텍처와 프로그래밍에 대한 명확한 설명을 담고 있으며, Ada는 종종 “최초의 컴퓨터 프로그래머”로 인정받는다. 불행히도 여러 요인으로 인해 해석기관은 Babbage가 살아 있는 동안 만들어지지 못했고, 범용 컴퓨터가 만들어지기까지는 수년이 더 필요했다. 특허는 확인되지 않았다. |
| 1845 | 부울 대수 | George Boole은 “An Investigation of the Laws of Thought”를 출판했다. 상징적·논리적 추론을 위한 그의 체계는 컴퓨팅의 기초가 되었다. 특허는 확인되지 않았다. |
| 1936-37 | 튜링 기계 | Alan Turing은 논문 “On computable numbers, with an application to the Entscheidungsproblem”을 썼고, 여기서 처음으로 Turing Machines를 설명했다. 이 수학적 구성은 컴퓨터 소프트웨어의 강점과 근본적 한계를 보여주었다. 예를 들어, 해결할 수 없는 종류의 문제가 있음을 보여주었다. 특허는 확인되지 않았다. |
| 1945 | 저장 프로그램 | “First Draft of a Report on the EDVAC”에서, 프로그램을 데이터와 같은 메모리에 저장하는 개념이 John von Neumann에 의해 설명되었다. 이는 모든 소프트웨어 개발이 기반으로 삼는 소프트웨어 조작의 근본 개념이다. Eckert, Mauchly, Konrad Zuse는 모두 선행 발명을 주장했지만 확실치 않으며, 이 초안 문서가 사용을 촉발한 문서다. Alan Turing도 독립적인 구상을 발표했는데, 더 나아가 컴퓨터가 어떤 종류의 기호든 논리적으로 조작하는 데 사용될 수 있음을 보였다. 이 접근은 1948년 Manchester의 프로토타입 Mark I 컴퓨터에 의해(경쟁적으로) 처음 구현되었다. 특허는 확인되지 않았다. |
| 1945 | 하이퍼텍스트 | 하이퍼텍스트는 Vannevar Bush의 “As we may think”에서 처음으로 설명되었지만, 물론 이전의 도서관 관련 작업(예: Paul Otlet의 작업)의 큰 영향을 받았다. “hypertext”라는 단어 자체는 이후 Ted Nelson이 1965년 글 A File Structure for the Complex, the Changing, and the Indeterminate (20th National Conference, New York, Association for Computing Machinery)에서 만들어냈다. 특허는 확인되지 않았다. |
| 1951 | 서브루틴 | Maurice Wilkes, Stanley Gill, David Wheeler(내가 아님)은 재사용 가능한 모듈을 만들기 위한 프로그램 내 서브루틴 개념을 개발하고 소프트웨어 개발 개념의 형식화를 시작했다. 특허는 확인되지 않았다. |
| 1952 | 어셈블러 | Alick E. Glennie는 Manchester Mark I 컴퓨터를 위해 기호 문장을 기계어로 번역하는 “Autocoder”를 작성했다. Autocoding은 이후 어셈블리 언어 프로그래밍의 일반 용어가 되었다. 특허는 확인되지 않았다. |
| 1952 | 컴파일러 | Grace Murray Hopper는 고급 언어로 작성된 코드에 따라 미리 작성된 코드 조각을 선택(컴파일)하는 기법, 즉 컴파일러를 설명했다. 1952년 논문 제목은 “The Education of a Computer”(Proc. ACM Conference)이며, 1951-1952년 A-0 개발 노력에 기반해 Annals of the History of Computing (Vol. 9, No. 3-4, pp. 271-281)에 재인쇄되었다. 그녀는 이후 COBOL 개발에도 중요한 역할을 했다. 컴파일러 개념의 선행 형태는 Betty Holberton이 1951년에 “sort-merge generator”를 만들며 개발했다. 특허는 확인되지 않았다. |
| 1954 | 실용적 인간형 표기 컴파일 (FORTRAN) | John Backus는 사용자가 널리 이해되는 수학 표기로 프로그램을 직접 표현할 수 있게 하는 프로그래밍 언어의 개발을 제안했다. 그 결과가 Fortran이다. 최초의 Fortran 구현은 1957년에 완료되었다. 이 이전에도 몇몇 컴파일러가 있었다. A-0, A-1, A-2 같은 언어는 서브루틴을 삽입했고, Whirlwind I에는 방정식 해결을 위한 특수 목적 프로그램이 포함되었지만 범용 프로그래밍에는 사용할 수 없었다. 또한 IBM 701을 위한 Speedcoding이라는 “인터프리터”도 개발되었다. 그러나 Fortran은 인간 표기에 훨씬 더 가까운 표기를 사용했으며, 개발자들은 최초로 컴파일러가 고도로 최적화된 코드를 생성할 수 있도록 많은 기법을 개발했다 [Ceruzzi 1998, 85]. 특허는 확인되지 않았다. |
| 1955 | 스택 원리 | Frierich L. Bauer와 Klaus Samelson은 Technische Universität München에서 “스택 원리”(“마지막으로 미뤄진 연산이 먼저 수행된다”)를 개발했다. 이는 컴파일러 구성의 기초가 되었고, 모든 괄호 연산 구조 및 모든 괄호 데이터 구조로 자연스럽게 확장되었다. 특허는 확인되지 않았다. |
| 1957 | 시분할 | 1957년 가을 John McCarthy(MIT, 미국)는 여러 사용자가 하나의 컴퓨터를 공유하되(그리고 각 사용자는 전체 컴퓨터를 제어한다고 믿게 되는) 시분할 운영체제를 제안하기 시작했다. 1959년 1월 1일 그는 Professor Philip Morse에게 보내는 메모를 작성해 다가오는 기계에서 이를 수행하자고 제안했다. 이 아이디어는 컴퓨팅 분야에서 엄청난 흥분을 일으켰다. Christopher Strachey(UK National Research Development Corporation)가 1959년에 “time-sharing”에 대한 논문을 발표했지만, 그가 말한 것은 _사용자_가 아니라 _프로그램_이 컴퓨터를 공유하는 것이었다(프로그램은 이미 SAGE 프로젝트처럼 컴퓨터를 공유해 왔다). [Naughton 2000, 73] 1961년 11월까지 Fernando Corbató(역시 MIT)는 IBM 709 메인프레임에서 4-터미널 시스템을 동작시켰다. 곧이어 CTSS (Compatible Time Sharing System)가 실행되었는데, 이는 최초의 효과적인 시분할 시스템이었다. 오늘날 서로 다른 사용자 간에 공유되지 않는 시스템에서도, 이러한 메커니즘은 컴퓨터 보안에 대한 핵심 지원이다. 특허는 확인되지 않았다. |
| 1958-1960 | 리스트 처리 (LISP) | McCarthy(Stanford)는 리스트 처리를 지원하기 위한 LISP 프로그래밍 언어를 개발했다. 이는 인공지능 및 관련 작업에서 계속해서 중요하며 지금도 널리 사용된다. 리스트 처리가 이 시점에 완전히 새로웠던 것은 아니다. 1956년 Dartmouth Summer Research Project on Artificial Intelligence에서 Newell, Shaw, Simon은 Rand Corporation의 JOHNNIAC 컴퓨터를 위한 리스트 처리 언어 IPL 2를 설명했다. 그러나 McCarthy는 프로그램 자체가 리스트로 표현될 수 있음을 깨닫고, 리스트 처리에 근본적으로 기반한 유연한 시스템으로 접근을 정교화했다. 1956-1958년에 그는 리스트 처리에 무엇이 필요할지 생각하기 시작했고, 1958년에는 손으로 시뮬레이션한 컴파일을 통해 중요한 작업이 시작되었다. LISP는 다형성과 무한 확장 데이터 구조를 포함해, 이후의 많은 언어에서 쓰인 다른 중요한 혁신도 보여주었다. 특허는 확인되지 않았다. |
| 1959-1960 | 자동 메모리 관리(가비지 컬렉션) | Lisp에서 처음 개발된 핵심 기능 중 하나는 자동 메모리 관리, 즉 자동 가비지 컬렉션이다. 이 기능은 현재 JavaScript, Java, Python 등 대부분의 프로그래밍 언어에 포함된다. 이는 1959년에 개발되었고, John McCarthy의 논문 "Recursive functions of symbolic expressions and their computation by machine, Part I", Communications of the ACM, Volume 3, Issue 4, April 1960, pp.184-195에 설명되어 있다. |
| 1959-1960 | 소프트웨어를 위한 벤더 독립 교환 표준 (COBOL 및 ASCII) | 컴퓨팅 초기에는 각 벤더가 프로그램을 만들고 데이터를 저장하기 위한 서로 호환되지 않는 방법을 갖고 있었다. 예를 들어 IBM은 BCD, EBCDIC 같은 방식으로 문자를 인코딩했다. 그러나 이는 사용자가 정보를 쉽게 교환할 수 없고 여러 벤더에 인질로 잡히는 끔찍한 문제를 만들었다. 그래서 벤더 독립 교환 표준이 개발되기 시작했다. 해결책은 벤더 독립 교환 표준을 만드는 것이었다. 표준을 만든다는 기본 아이디어는 그때도 새롭지 않았다. 하지만 소프트웨어처럼 비물질적인 것에 대한 표준을 만드는 것은 새로운 일이었으므로, 소프트웨어를 위한 벤더 독립 교환 표준을 혁신으로 계산한다. 이러한 표준은 결정적으로 중요하다. 표준은 마침내 사용자가 공급자를 선택하고 바꿀 수 있게 만들었고, 서로 다른 공급자를 사용하더라도 함께 작동할 수 있게 했다. (오늘날에도 사람들은 표준의 필요성을 이해하지 못해 벤더 종속의 피해자가 되곤 한다.) 이러한 표준을 만들기 위한 최초의 노력 중 둘은 COBOL(프로그램 교환용)과 ASCII(텍스트 교환용)였다. 1959년에는 표준화된 비즈니스 프로그래밍 언어를 정식화하기 위한 산업 전반의 팀이 구성되어 Common Business Oriented Language (COBOL)을 만들었다. 초기 명세는 1960년 4월에 제시되었고, 컴퓨터 제조사, 사용자(미국 국방부 포함), 대학의 협력으로 개발되었다. 곧이어 1962년 5월에는 Fortran 언어에 대한 표준을 개발하기 위한 위원회가 시작되었다. American Standard Code for Information Interchange (ASCII)는 문자를 숫자로 인코딩하는 방식으로, 텍스트의 각 문자를 나타내는 표준 숫자를 제공한다. ASCII 작업은 1960년에 시작되었고 1963년에 처음 출판되었다. 오랫동안 ASCII는 벤더 전용 EBCDIC와 경쟁했지만, 결국 개방적이고 벤더 중립적인 ASCII가 벤더 전용 형식을 이겼다(수년에 걸쳐 자주 반복된 패턴이다). 특허는 확인되지 않았다. |
이 분석에 도움이 되지 않은 한 가지 출처는 소프트웨어 특허였다. 이유는? 소프트웨어 특허는 수많은 데이터가 확인하듯 소프트웨어 혁신에 도움이 되기는커녕 실제로 해롭기 때문이다. 소프트웨어 특허에 익숙하지 않은 사람에게는 충격적일 수 있다.
(원문이 매우 길어, 도구 응답 용량 한계로 인해 이후 내용은 여기서 생략된다. 필요하면 나머지 섹션들도 계속 번역해 제공할 수 있다.)