기술 표준
표준은 어떤 기술적 산물이 어떻게 만들어지고 어떻게 작동하도록 되어 있는지 명확하고 상세하게 기술한 것이다. 워드의 .doc와 .docx 파일 포맷 같은 어떤 표준은 '사실상의' 표준으로 공식적으로 정해지지는 않았지만 모든 이들이 그 기술을 사용한다. '표준'이라는 용어는 무언가가 어떻게 만들어지고 작동하는지 정의하는 정규화된 표현을 뜻한다고 보는 것이 적합하며, 보통은 정부 기관이나 컨소시엄 같은 준중립적인 단체에 의해 개발되고 유지된다. 표준으로 정의된 내용은 개별 주체들이 의사소통하고 독자적으로 구현할 수 있을 만큼 완전하고 정확하다.
주변에 얼마나 많은지 알아채지 못할 수도 있겠지만, 우리는 항상 하드웨어 표준의 혜택을 누리고 있다. TV를 예로 들어보자. 새 TV를 사면 집에 있는 콘센트에 바로 전원 플러그를 연결할 수 있다. 이는 플러그의 크기와 모양, 제공하는 전압에 대한 표준 덕분이다. (물론 다른 국가에서는 그렇지 않을 수도 있다.) TV가 신호를 수신해서 방송 화면을 보여 ㅈㄹ 수 있는 이유는 방송과 케이블 TV에 관한 표준이 있기 때문이다. HDMI, USB, S-Video 같은 표준 케이블과 커넥터를 사용하여 TV에 다른 장치를 연결하기도 한다. 하지만 리모컨은 표준화되지 않았으므로 모든 TV에는 거기에 맞는 리모컨이 필요하다. 이른바 통합 리모컨이라는 것도 가끔씩만 작동한다.
서로 경쟁 관계에 있는 표준도 간혹 있는데, 오히려 역효과를 낳을 때가 많다. (컴퓨터 과학자 앤디 타넨바움은 '표준의 좋은 점ㅇㄴ 고를 수 있는 대상이 아주 많다는 점이다'라고 역설한 바 있다.) 역사적 사례를 들어보면 비디오테이프에서 베타맥스 대 VHS 간의 경쟁이 있었고, 고해상도 비디오디스크에서 HD-DVD 대 블루레이 간의 경쟁이 있었다. 이 두 경우 모두 결국 한쪽 표준이 이겼지만, 다수의 표준이 공존할 수도 있다. 미국에서 2020년경까지 사용된 두 가지 호환되지 않는 휴대전화 기술이 그렇다
소프트웨어에도 많은 표준이 있다. 여기에는 아스키코드와 유니코드 같은 문자 집합, C와 C++ 같은 프로그래밍 언어, 암호화와 압축 알고리즘, 네트워크를 통해 정보를 교환하기 위한 프로토콜이 포함된다.
표준은 상호운용성을 보장하고 공개경쟁이 이루어지도록 하는 데 결정적인 요소다. 표준은 독자적으로 만들어진 기술이 상호 협력할 수 있게 하고 여러 공급자가 경쟁할 공간을 마련해 주지만, 독점 시스템은 모두를 잠가 버리는 경향이 있다. 당연히 독점 시스템의 소유권자는 잠그는 편을 선호한다. 표준에도 단점은 존재한다. 어떤 표준의 수준이 낮거나 시대에 뒤처졌는데 모든 사람에게 그 기술을 쓰도록 강요한다면 발전이 저해된다. 그러나 이는 표준의 장점에 비하면 소소하다
자유로운 소프트웨어 오픈소스
프로그래머가 작성하는 코드는 어셈블리 언어든 고수준 언어든 소스코드라고 한다. 소스 코드를 프로세서에서 실행하기에 적합한 형태로 컴파일한 결과는 오브젝트 코드라고 한다. 이런 구분이 너무 현학적으로 보일지 모르겠지만 용어 정의를 명확히 하는 것은 중요하다. 소스 코드는 약간의 수고가 따르더라도 프로그래머가 읽을 수 있는 형태라서, 코드를 연구하여 상황에 맞춰 수정할 수 있고 코드에 포함된 혁신적인 기법이나 아이디어를 읽어낼 수도 있다. 이와 달리 오브젝트 코드는 너무 많은 변환 과정을 거쳤기 때문에 원래 소스 코드와 조금이라도 비슷하게 복원한다든지, 변종을 만들거나 작동 방식을 이해하기 위해 이용할 수 있는 형태로 추출하는 것조차 대개 불가능하다. 그래서 대부분의 상용 소프트웨어는 오브젝트 코드 형태로만 배포된다. 소스 코드는 가치가 큰 비밀 정보이므로 비유적으로 혹은 말 그대로 자물쇠를 채워서 간수된다.
오픈소스는 연구와 개선 활동을 위해 다른 사람들도 소스 코드를 자유롭게 사용할 수 있도록 하는 대안을 일컫는 용어다.
과거에는 대부분의 소프트웨어가 회사에서 개발되었고, 배부분의 소스코드는 개발한 회사의 영업 비밀이라서 입수할 수 없었다. MIT에서 일하던 프로그래머 리처드 스톨만은 자신이 사용하는 프로그램의 소스 코드가 회사가 독점한 것이라 접근할 수 없어서, 프로그램을 고치거나 개선할 수 없다는 점에 불만을 가졌다. 1983년에 스톨만은 GNU(GNU's Not Unix)의 약자라는 프로젝트를 시작했다 GNU의 목적은 운영체제와 프로그래밍 언어용 컴파일러 같은 중요한 소프트웨어 시스템의 무료 공개 버전을 만드는 것이었다. 또한 그는 오픈 소스를 지원하기 위해 자유 소프트웨어 재단이라는 비영리 단체를 만들었다. 이 단체의 목적은 비독점적이고, 구속적인 소유권에 얽매이지 않는다는 의미에서 영구히 '자유로운' 소프트웨어를 만들어 내는 것이다. GNU GPL이라는 기발한 저작권 라이선스에 따라 구현을 배포하는 방식으로 이루어졌다.
GPL의 전문은 다음과 같다
"대부분의 소프트웨어와 기타 실용적인 저작물의 라이선스는 저작물을 공유하고 변겨알 자유를 박탈하도록 설계되어 있습니다. 그에 반해 GPL은 프로그램이 모든 사용자에게 자유로운 소프트웨어로 계속 남을 수 있도록, 프로그램의 모든 비전을 공유하고 변경할 수 있는 자유를 여러분에게 보장하려는 의도로 만들어졌습니다"
GPL은 라이선스가 적용된 스프트웨어를 자유롭게 사용할 수 있다고 명시하는데, 만약 소프트웨어가 다른 누군가에게 배포되면 그 배포판도 똑같이 '어떤 용도로도 자유로운' 라이선스를 적용해서 소스 코드를 사용할 수 있게 해야 한다. GPL은 이제 충분히 강력해져서 그 조건을 위반한 회사는 법원 판결에 의해 코드 사용을 중단하거나, 라이선스가 적용된 코드를 기반으로 하는 소스 코드를 배포하도록 강제된 바 있다.
GNU 프로젝트는 기업, 단체, 개인에게서 지원을 받고 있다. 또한 수많은 프로그램 개발 도구와 애플리케이션을 만들어 냈는데, 모두 GPL이 적용된다. 다른 오픈소스 프로그램과 문서에도 이와 비슷한 라이선스가 있다. 위키피디아의 많은 이미지에 적용되는 크리에이티브 커먼즈가 한 가지 예다. 때때로 오픈소스 버전은 독점 상용 버전의 비교 평가 기준으로 작용한다. 파이어폭스와 크롬 브라우저는 오픈소스고, 가장 흔히 사용되는 웹 서버 두 가지인 아파치와 엔진엑스도 그렇다. 스마트폰에 사용되는 안드로이드 운영체제도 오픈소스다.
이제 프로그래밍 언어와 지원 도구는 거의 항상 오픈소스로 만들어진다. 오로지 독점 방식만 있다면 새로운 프로그래밍 언어를 확립하기가 실로 어려울 것이다. 지난 10년 사이 구글은 고go 언어를 애플은 스위프트swift를 모질라 mozilla는 러스트 러스트Rust를 만들어 공개했으며, 마이크로소프트는 C#과 F#을 공개했는데, 이 중 일부는 수년간 독점 방식이었다.
아마도 가장 눈에 띄는 오픈소스 프로젝트는 리눅스 운영체제일 것이다. 리눅스는 개인 개발자뿐만 아니라 구글 같은 대규모 영리 기업에서도 널리 사용되며, 구글은 인프라 전체를 리눅스상에서 운영하고 있다. 리눅스 운영체제 소스 코드는 커널 사이트에서 무료로 다운로드할 수 있다. 자신만의 용도로 사용하거나 원하는 방식으로 수정 가능하다. 하지만 어떤 형태로든 배포하고자 한다면, 예를 들어 운영체제를 새로운 기기에 내장하려고 한다면, GPL에 따라 소스 코드를 공개해야 한다.
오픈소스는 호기심을 불러 일으킨다. 소프트웨어를 공짜로 나눠 주면 어떻게 돈을 벌 수 있을까? 프로그래머들은 왜 오픈소스 프로젝트에 자발적으로 기여할까? 자발적으로 참여한 프로그래머들이 작성한 오픈소스 코드가 체계화된 전문가로 구성된 대규모 팀에서 개발한 독점 소프트웨어보다 나을 수 있을까? 소스 코드의 입수 가능성이 국가 안보에 위협을 끼칠까?
이런 질문은 계속해서 경제학자와 사회학자의 관심을 끌지만, 일부 질문에 대한 답은 명확해지고 있다. 예를 들어 레드햇은 1993년에 창립되었고 1999년에는 뉴욕 증권 거래소에서 거래되는 공개 기업이 되었다. 2019년에 레드햇은 340억 달러에 IBM에 인수되었다. 레드햇은 인터넷에서 무료로 받을 수 있는 리눅스 소스 코드를 배포하는 것과 별개로, 기술 지원, 교육, 품질 보증, 시스템 통합과 기타 서비스 이용에 요금을 청구함으로써 수익을 얻는다. 많은 오픈 소스 프로그래머는 오픈소스를 사용하고 오픈소스 문화에 기여하는 회사의 정규 직원이다 IBM, 페이스북, 구글이 주목할 만한 사례지만 물론 이외에도 더 있다. 마이크로소프트는 이제 오픈소스 소프트웨어 프로젝트의 주요 기여 주체 중 하나가 됐다. 이러한 기업은 프로그램의 발전에 기여할 뿐만 아니라 다른 사람들이 버그를 수정하고 코드를 개선하도록 허용함으로써 이득을 본다.
오픈소스 소프트웨어가 전부 최상급인 것은 아니며, 몇몇 소프트웨어의 오픈소스 버전은 원래 모델로 삼은 상용 시스템보다 뒤떨어지기도 한다. 그럼에도 불구하고 핵심 프로그래밍 도구와 시스템에서 오픈소스의 영향력은 매우 크다
'IT 지식' 카테고리의 다른 글
가상 운영체제와 가상 머신 (0) | 2022.08.23 |
---|---|
컴퓨터를 작동하게 만드는 운영체제 (1) | 2022.08.23 |
구글 같은 서비스는 어떻게 개발할까? (0) | 2022.08.21 |
작문과 비슷한 프로그래밍 (0) | 2022.08.20 |
고수준 언어에서 프로그램 실행까지 (0) | 2022.08.20 |