본문 바로가기

AT&T, 벨 연구소 그리고 컴퓨팅 과학 센터

유닉스를 이해하려면, 먼저 벨 연구소(Bell Labs)의 업무 방식과 창조적인 연구 환경을 이해해야 한다.

 

AT&T 

American Telephone & Telegraph Company

1885년 출범하여 미국 전역에서 많은 지역 전화 회사를 합병하며, 사실상 미국 전국 전화 시장 독점했다.

사실상  전화 시장을 독점한 민간 사업체이기 때문에,

점에 대한 문제에 벗어나는 편법으로 정부의 여러 규제와 견제 아래 운영될 수 있었다.

1982 반독점으로 인한 분할 확정되어, 1984.1.1 회사가 8개로 분할된다. 

 

벨 연구소(Bell Labs)

Bell Telephone Laboratories

  • 1925년 AT&T는 미국 전역에 전화 시스템을 제공하는 과정에서 발생한 과학적, 공상적 문제를 체계적으로 다루기 위한 연구 기관을 설립한다.
  • AT&T는 미국 전화 서비스를 독점으로 운영했기 때문에, 정부의 독접 규제 관리하에 예측 가능하고 안정적인 수익률을 보장받았다. 규제 완화의 수단으로 수십년간 수익의 약 2.8%를 연구 개발에 투자했고, 0.3%는 기초 연구에 투자할 수 있었다.
    안정적인 연구 자금 지원은, 1천 명 이상이 물리학, 화학, 수학 및 다양한 공학 기술 분야를 전공한 박사 인력들이 자신의 관심 있는 연구를 자유롭게 추진할 특별한 행복을 누렸다. 단기간에 결과를 내지 못하거나 영영 결론을 내지 못할 분야라도 자유롭게 탐구할 수 있었기에 자유롭게 기초 과학 분야에 많은 발견을 이루어 낼 수 있었다.
  • 그중 가장 유명한 업적은 트랜지스터다. 그리고 벨 연구소는 자연스레 전화기 같은 소비자용 하드웨어 설계부터 스위칭 시스템, 마이크로파 송전탑, 광섬유 케이블에 이르기까지 모든 것을 설계, 구축하고 개선하는 개척자가 되었다. 

 

컴퓨팅 과학 연구 센터

  • 컴퓨터는 성능이 높아지고 가격은 내려가면서 그 용도가 확대되었다. 데이터 분석용으로 더 많이 사용됐고, 물리계와 물리 작용에 대한 광범위한 모델링 및 시뮬레이션을 수행하는 데도 이용됐다.
  • 벨 연구소에서는 1930년대 이후 컴퓨터와 컴퓨팅 분야에 관여했고, 1950년대 후반쯤에는 대형 중앙 컴퓨터들이 구비된 벨 연구소 컴퓨팅 과학 연구 센터를 갖췄다.
  • Unix를 만든 켄 톰슨(Ken thompson)은 1965년에, C언어를 만든 데니스 리치(Dennis Ritchie)는 1967년에 컴퓨팅 과학 연구 센터에 기술직 멤버로 합류했다. 그리고 이후 멀틱스(Multics) 프로젝트에 합류했었다.

UNIX 등장 배경

~ 1960년

  • 당시의 컴퓨터
    컴퓨터는 근본적으로는 계산기와 크게 다르지 않다.하지만 컴퓨터는 산술연산을 극도로 빠르게 수행할 수 있었다.
    그렇기에 초기 컴퓨터는 탄도계산 수학 연산과 기술 연구에 주로 사용되었다.
    국방성의 지원을 받아 개발한 에니악(ENIAC, 1947)은 1초당 덧셈과 뺄셈을  5000회, 곱셈을 350회, 나눗셈을 150회 처리할 수 있었다. 
  • 운영체제 호환성 문제
    • 운영체제의 가장 중요한 목적은 컴퓨터의 하드웨어를 관리하는 것이다. 당시의 운영체제는 지금보다 단순 했지만, 그 시대에 비추어보면 크고 복잡했다.
    • IBM이나 DEC 같은 컴퓨터 제조 업체는 각자 생산하는 다양한 종류의 하드웨어 간에 공통성이 전혀 없어 호환이 불가능했다. 심지어 같은 제조 업체에서 만든 하드웨어 제품조차 그랬다. 따라서 이를 실행할 하드웨어에 맞는 운영체제도 하드웨어마다 구현할 수밖에 없었다.
    • 하나의 하드웨어용 운영체제로 작성된 프로그램도 다른 하드웨어로 이전하려면 사실상 처음부터 다시 작성해야만 하는 상황이었다.
  • 일괄 처리 방식 문제
    • 대부분의 운영체제는 ‘일괄 처리 방식’이었다.
    • 천공카드 기반으로 동작하는 컴퓨터는 운용자에게 천공카드를 건네준 다음 결과가 나올 때까지 몇 시간, 심지어는 몇일을 기다려야 했다.
    • 1960년대에는 초당 백만번의 처리가 가능할정도로 컴퓨터 성능의 발전되었으나, 발전된 컴퓨터의 처리 성능은 낭비되었다.

1961년

  • CTSS(Compatible Time-Sharing System, 호환 시분할 시스템)의 등장
    • 일괄 처리 방식 문제를 해결한, 당시에 가장 혁신적인 운영체제다
    • MIT의 컴퓨테이션 센터에서 개발된 최초의 시분할 운영 체제들 중 하나이다.
    • 여러 사용자가 동시에 접근해 사용해도 활성화된 사용자 한 명에서 다음 사용자로 재빨리 프로세스를 전환함으로써 각 사용자가 컴퓨터 전체를 혼자서 마음대로 쓰고 있는 것처럼 동작하여 리소스 낭비 문제 해결했다.
    • 이후 Multics 의 개발에 영향을 주게 된다.

 

1964년

  • Multics(Multiplexed Information and Computing Service, 멀틱스)
    • MIT, GE, Bell Labs 주도로 시분할 처리와 다중 사용자를 더 잘 지원할 멀틱스 협력 프로젝트를 시작한다.
      • MIT 연구자들은 CTSS를
      • GE에서는 새로운 하드웨어를
      • Bell Labs에서는 자체 운영체제를 만들면서 쌓은 수많은 경험을
    • 하지만 프로젝트의 아키텍처의 복잡성과 하드웨어의 비효율성으로인해, 벨 연구소는 1969년 4월에 Multics 프로젝트를 포기한다.
    • 벨 연구소의 켄 톰슨(Ken thompson)과 데니스 리치(Dennis Ritchie)도 Multics 프로젝트에 참여했었다.

UNIX 등장

1969년 

    • Multics 프로젝트의 유산
      • 벨 연구소의 켄 톰슨은, Multics 프로젝트는 계속 운영체제 개발하고 싶었지만, 멀틱스의 실패와 고가의 컴퓨터에 대한 부담으로 벨 연구소의 경영진과 관리자들은 새로운 컴퓨터 구매를 부담스러워했다.
        • 1958년, IBM 7090 32K(32,768) 36bit 워드 메모리 $300만 달러
        • 1964년, PDP-7        8K(  8,192) 18bit 워드 메모리 $7만 2천 달러
        • 1970년, PDP-11    24K 주기억장치, 500K 디스크   $6만 5달러 (PDP-10 $50만)
        • 2015년, 맥북에어 8GB 메모리(33만 배 이상), 500GB 디스크(100만 배), $1천 달러
  • 초기 형태의 UNIX
    • 이때 켄은 거의 사용하지 않는 구식이 되어버린 DEC 제조사의 PDP-7을 발견해 3주만에 초기 형태의 UNIX를 개발한다.
    • 이때의 UNIX 도 하드웨어의 어셈블러로 작성되어 기계 의존적이며, 기종간에 호환성이 없는 그런 운영체제였다. 그렇기에 다른 기종에 이식하려면 그 기종에 맞는 어셈블리어로 다시 작성해야만 하는 문제가 있었다.
    • Unix 의 어원은  Multics가 ‘모든 기능을 많이’ 제공하는 반면, 새로운 시스템은 어떤 기능을 기껏해야 하나 제공하므로 ‘UNICS’라고 불러야 된다고 했다. 이는 ‘multi’를 ‘uni’로 바꾼 말장난이었다.
    • PDP-7 UNIX 시스템은 Multics와 같은 대형 중앙 집중식 컴퓨터보다 더 재미있고 생산적이기에 사람들에게 인기를 끌었다. 그래서 켄 톰프슨, 데니스 리치와 다른 이들은 더 많은 사용자를 지원하고, 더 흥미로운 연구를 진행하기 위해 컴퓨터를 구매를 요청했지만 경영진은 여전히 이를 거부한다.
  • BCPL & B언어
    • Multics의 중요한 기여 중 하나는, 운영체제를 어셈블리어가 아닌 고수준 언어인 PL/1로 운영체제 작성을 시도했다는 점이다.PL/1는 1964년에 IBM이 포트란, 코볼, 알골에서 좋은 아이디어를 모은 언어를 개발하려는 과정에서 만들어졌지만, 너무 크고 복잡해서 컴파일하기 어려워 제때 개발되지 못했다.
    • BCPL (Basic Combined Programming Language)은 PL/1의 어떤 변종보다도 훨씬 간단했고, 운영체제 코드를 작성하기에 상당히 적합했다. 벨 연구소에서 멀틱스 프로젝트에 참여했던 멤버들은 BCPL에 매우 익숙했다.
    • 벨 연구소의 켄 톰슨과 데니스 리치는 계속해서 어셈블리어가 아닌 프로그래밍 언어를 사용하는 운영체제 모듈을 작성하려고 했다.
    • 그들은  DEC PDP-7 과 같은 미니 컴퓨터에서 BCPL을 시용하려면 해당 언어의 몇몇 부분을 수정해야 했고, B언어를 탄생시켰다.
  • 참고
    • 초기 컴퓨터는 ‘바이트 기반’이 아니라 ‘워드 기반’으로 동작했고, 운영체제도 '워드' 관점에서 실행되어야 했다.
    • 초기 UNIX가 동작한 PDP-7은 18비트(약 2바이트) 단위로 정보를 처리했다.
      IBM 7090 같은 컴퓨터는 정보를 36비트(약 4바이트) 단위로만 조작했다.
      (이와는 달리 PDP-11의 주기억장치는 기본 단위가 8bit, 즉 1Byte였다.)

 

1971년

  • UNIX 1판
    • PDP-10 구매 요청을 거절당한 켄과 데니스는, 상대적으로 저렴한 PDP-11를 특허출원서 출력 소프트웨어 개발용으로 구매하여, 정규 업무 시간 외인 밤에만 UNIX 개발에 사용하기로 한다. 이 버전이 UNIX 제1판이 되었다.

PDP-11/20 앞에 있는 켄(앉아 있음)과 데니스, 1972년(위키백과)

  • C언어
    • 초기 UNIX의 기중 머신인 PDP-7은 워드 기반으로 동작하는 컴퓨터(18비트,약 2바이트)를 기준으로 작성된 프로그램은 동일한 워드 길이의 머신에만 적합했다. 워드 길이가 다른 머신에서 사용할 수 없었다.
    • B언어는 타입이 없는(typeless) 언어다. 정확히 말하자면, 모든 자료형이 단일한 워드 길이의 자료형을 가지고, 모든 변수가 워드 길이로 다루어져야 했다.
    • PDP-11 는 Byte 기반 컴퓨터로 PDP-7 의 18bit 워드 기준으로 작성된 초기 UNIX 와 호환되지 않았다그래서 PDP-11을 구했을 때 데니스는 B를 새로운 아키텍처에 맞춰 향상시킨 NB(NEW B)라는 새로운 컴파일러를 구현하기 시작했고, 결국에는 이 언어가 C가 됐다.
    • C언어는 PDP-11이 제공하는 데이터 타입(Byte 기반)과 일치하는 데이터 타입을 제공했다.
      데이터 타입에는 단일 바이트, 2바이트 정수, 마지막으로 4바이트나 8바이트 부동소수점 수가 있었다. 타입이 지정된 포인터에 산술연산을 지원했다.

 

1973년

  • UNIX 4판
  • UNIX 라이선스 판매 시작
    • AT&T는 UNIX 라이선스를 판매하기 시작했고, 대부분 UNIX 6판(1745) 라이선스였다.
    • 상업용의 경우, 2만 달러(현재 약 10만 달러)였다.
    • 대학교의 경우, 영업 비밀 보호 협약만 맺으면 명목상 수수료만 받았다.
  • AT&T 규제와 UNIX 기술지원
    •  AT&T는 정부의 규제 조사를 피해가기 위해 어떠한 형태의 UNIX 기술지원도 제공하지 않았다.
    • 정부의 규제를 받는 공공 독점 업체인 AT&T가 UNIX를 판매하면, 전화 서비스로 벌어들인 수익을 유닉스 개발 비용으로 이용하면서 다른 운영체제 공급 업체와 경쟁한다는 문제가 제기되었기 때문이다.
    • 대학에서 UNIX를 무료로 사용했지만 오픈소스는 아니었기에 교육 목적으로만 사용할 수 있었고, 라이선스를 취득한 사용자는 라이선스를 보유한 다른 사용자끼리 공유해야했다. 
    • 그럼에도 불구하고 미국 내 사용자 커뮤니티가 급속히 늘어나며, 공식적인 기술 지원이 없었기에 사용자들은 서로 돕기 위해 어쩔 수 없이 뭉쳐야만 했고, 세계 전역에서도 사용자 그룹이 생겨나며 주요한 기술 혁신이 일어나는 계기가 되었다.
  • C언어
    • 벨 연구소의 데니스 리치(Dennis Ritchie)가 어셈블리 언어로 되어있던 UNIX는 C언어로 재작성되어 이식성과 호환성있는 시스템으로서 사용자들로부터 큰 반향을 일으켰다.
    • UNIX 제6판(1975)의 전체 시스템의 소스 코드는 대부분 C로 작성되어 있기에 UNIX의 성공과 함께 C언어가 퍼져나가기 시작했다.

 

1974년

  • 미국 법무부가 AT&T를 상대로 반독점 소송을 시작했다.
  • 근거는 AT&T가 미국 내 대부분의 전화 서비스뿐만 아니라 산하에 있는 전화 회사들이 사용하는 장비까지 통제하고, 따라서 AT&T가 국가 전체의 통신을 통제한다는 이유에서였다.

 

1975년

  • 유닉스 6판
    • 이때의 유닉스는 DEC PDP-11/40과 11/45 컴퓨터를 위한 범용적 다중 사용자용 대화식 운영체제다.
    • shell, 파이프pipe, 그렙grep, 정규 표현식regular expression
    • 분리 가능한 볼륨을 지원하는 계층적 파일 시스템
    • 서로 호환되는 파일, 디바이스, 프로세스 간 입출력
    • 비동기 프로세스를 시작하는 기능
    • 사용자 단위로 선택 가능한 시스템 명령어
    • 십여 가지 언어를 포함하는 100개 이상의 서브시스템
  • C언어
    • 유닉스 제6판의 커널은 약 9천 줄의 C 코드와 700줄 정도의 어셈블리어 코드로 이루어졌다.
    • 그중 어셈블리어 부분은 레지스터, 디바이스, 메모리 매핑을 설정하는 것처럼 컴퓨터 기종별로 특수한 처리를 담당했다.

 

1976년

  • Make
    • Make가 처음으로 구현되었다.
    • 대부분의 대형 프로그램은 많은 소스 파일로 구성되고, 이 파일들을 함께 컴파일하고 링크해야 실행 프로그램이 만들어진다.

 

1977년

  • 이 시점 이전까지만 해도, 대부분의 운영체제는 고수준 언어로 작성됐다 하더라도 특정 아키텍처에 어느 정도 종속돼 있는 어셈블리어가 포함되어 있었다. 그렇기에 하드웨어 제조사가 운영체제를 만들었다.
  • 정부의 규제를 받고 있는 AT&T가 PDP-11 제조사인 DEC와 긴밀한 관계인 것에 경쟁사들의 불만과 여러 이유로, 스티븐 존슨과 데니스 리치는, UNIX 원본 코드를 그대로 단일 기종으로 이식하기보다는 이식성 있은 유닉스 버전을 구현했다.
  • 그 이후, 워크스테이션(과학자와 공학자를 위한 개인용 컴퓨터) 시장은 제조사가 새 운영체제를 만들 필요가 없었다. 유닉스와 거기에 딸려 오는 프로그램을 워크스테이션이 사용하는 프로세서에 맞춰 이식하는 현대의 형태가 구현되었다.
  • IBM PC(Personal Computer)가 1981년에 처음으로 등장했고, 결국 워크스테이션과 PC 간의 구분이 모호해졌다. 오늘날 이런 종류의 컴퓨터는 응용 분야에 따라 윈도우, 맥OS, 또는 유닉스나 유닉스 계열 시스템 기반으로 작동한다.

 

1978년

  • ANSI C 표준이 정해지기 전까지 C 언어 사용자들은 Kernighan과 Ritchie의 The C Programming Language(Addison-Wesley Publishing Company, Reading, MA, 1978) 를 사실상의 표준으로 삼았는데, 그것을 K&R C라고 불렀다.
  • ANSI C 표준이 정해진 이후에 비교적 간단한 K&R C를 클래식 C(classic C)라고 부르고 있다.

 

1979년

  • 유닉스 7판

 

1984년

    • UNIX 시장의 성장 배경
      • UNIX는 초반에 대학교에서 거의 무료로 사용할 수 있었고, UNIX를 사용하던 대학생들이 현업에 뛰어들었고, 그들은 여전히 유닉스를 사용하기를 원했으며 그들이 일하는 회사는 현금을 지불할 수 있했기 때문에 UNIX 시장이 성장하기 시작했다.
    • UNIX 전쟁 배경
      • UNIX를 상업적으로 판매하는데 주저했던 AT&T는 반독점으로 인한 분할(1984.1.1) 이후, 유닉스 시스템 연구소(Unix System Laboratories, USL)를 설립하고 UNIX 에 대한 상업적 마케팅을 공격적으로 진행한다.
      • UNIX는 1979년 제7판에서 발전해나온 큰 두 갈래가 있다.
        하나는 빌 조이와 그의 동료들의 작업에 바탕을 둔 버클리 유닉스에서 파생되었다.
        다른 하나는 AT&T가 유닉스 전문성과 소유권을 통해 수익성 있는 사업을 하려고 노력하면서 만든 버전이다.

 

1980년대 후반

  • UNIX  전쟁 
    • 유닉스 시스템 공급업체가 무수히 많았고, 모두 상표권이 붙은 이름인 ‘유닉스’를 사용하면서 벨 연구소에서 만든 유닉스 제7판을 바탕으로 개발된 소프트웨어를 공급했다.
    • 문제는 UNIX 시스템은 서로 호환성이 없었고, AT&T의 시스템 V와 버클리 배포판 사이에는 호환성 문제가 특히 심했다.
    • 양측 모두 공통 표준이 필요하다는 데에는 동의했지만, 무엇을 표준으로 삼을지에 대해서는 당연히 서로 의견이 맞지 않았다.

 

대부분의 성공적인 명령어 집합 아키텍처instruction set architecture(ISA)는 C와 유닉스에 적합하게 만들어졌다.

유닉스와 C의 이식성 덕분에 회사나 대학교에서 새로운 아키텍처를 만들고 소프트웨어를 신속하게 이식할 수 있었을 뿐만 아니라, 명령어 집합이 C 코드를 실행하기 좋게 하면서 C 프로그램으로 컴파일하기 어려운 아키텍처 특성은 제거하는 경향이 있었다.

1980년대와 1990년대에는 CPU 설계가 유닉스와 C를 중심으로 이루어질 수밖에 없을 정도로 유닉스와 C의 영향력은 대단했다. 누구도 다른 언어에 맞춰진 CPU를 성공적으로 만들어내지 못했다.

 

1983년

  • C가 발전하고 다양한 컴퓨터 시스템에 널리 사용되고, 결정적으로 C 언어가 미국 정부 프로젝트를 위해 사용되기 시작하면서 미국의 표준화 기구인 미국표준협회(ANSI) 에 의해 C 언어의 표준화 논의가 시작된다.
  • ANSI가 K&R C를 확장 겸 표준화하기 위해 짐 브로디를 주축으로 X3J11 위원회를 소집하여 논의하게 된다.

1989년

  • 첫 번째 공식 C 표준 ANSI C(공식명칭: ANSI X3.159-1989) 표준 제정되었다.
    이때 제정된 C언어 표준이라고 해서 C89라고도 불렀다.
  • C 언어는 그 자체도 중요하지만, 표준 라이브러리를 사용한다는 점에서도 중요하다. C 언어 표준 라이브러리는 형식화된 입출력, 문자열 처리, 수학 연산 등의 작업을 위해 프로그래머가 필요로 하는 기본 수단을 제공한다. 

 

1992년

 

라이선스 분쟁과 C 표준

 

 

결국 경쟁적이고 서로 다른 ‘개방’ 표준이 두 개 만들어졌다.

기본 라이브러리 함수에 대한 ‘POSIX Portable Operating System Interface’라는 표준과

X/Open이 관리하는 ‘단일 유닉스 규격Single Unix Specification’이 양립했다.

 

버클리 측은 AT&T에서 유래한 코드를 계속 제거하고 새로 작성했으며, 1991년에는 (그들이 생각하기에) AT&T의 독점 코드가 전혀 없는 유닉스 버전을 발표했다. 그렇지만 AT&T와 USL은 납득하지 못했고 이는 소송으로 이어졌다. 

 

소송에 너무 많은 비용을 태워버린 AT&T의 USL은 지분을 판매했고, 노벨에서 USL의 UNIX에 대한 권리를 사들인다.

노벨은 이 전쟁을 서로 합의 종료시킨다.

 

사실상 공공 영역에 있는 대학의 UNIX의 권리까지 주장하기에는 너무 늦은 상태였다. 

AT&T가 유닉스로 돈을 벌려고 애쓸수록 대학교에서 유닉스를 사용할 수 있는 범위에도 제약이 생겼고, 이 점은 그런 제약이 없던 BSD에는 이득으로 작용했다. 동시에 AT&T와 BSD 간에 진행되던 전쟁은 다른 이들이 자신만의 유닉스 계열 시스템을 만들어보도록 부추겼다.

 

파생된 운영체제들은 결국 모두 같은 기능을 제공했지만 완전히 새로운 코드로 만들어진 재구현이었다.

코드가 재작성된 운영체제들은 AT&T 코드를 벗어난 것이기 때문에 AT&T의 지식재산권을 침해하지 않았다.

 

 

미닉스와 리눅스

1987년에 암스테르담 자유 대학교Vrije Universiteit Amsterdam에서 앤드루 타넨바움이 미닉스를 만들었다.

미닉스는 유닉스와 유사한 운영체제로, 시스템 호출 레벨에서는 유닉스와 호환되지만 다른 커널 구조로 완전히 새로 작성된 시스템이었다. 물론 미닉스 소스 코드는 무료로 이용 가능했다.

 

AT&T의 라이선싱 제한 시도와 미닉스를 지침으로 이용할 수 있던 상황이 결합해서 시스템 호출 레벨에서 호환되는 또 다른 유닉스 계열 시스템이 개발됐다.

 

당시 겨우 21세 핀란드 대학생이던 리누스 토르발스가 독자적으로 만들었다. 토르발스는 1991년 8월 25일에 유즈넷 뉴스그룹인 comp.os.minix에 리눅스에 관한 글을 올렸다.

 

켄과 데니스가 유닉스의 성공을 예측하지 못한 것처럼, 토르발스는 그가 취미로 만든 시스템의 놀라운 미래를 예측하지 못했다. 

 

현재 리눅스는 어떤 종류의 컴퓨터에서든 작동할 수 있는 원자재 운영체제다. 리눅스는 말 그대로 수십억 개의 장치(일례로 모든 안드로이드 휴대폰)에서 작동한다. 리눅스는 인터넷 인프라의 상당 부분을 구동하는데, 구글, 페이스북, 아마존 등 주요 기업의 서비스를 위한 서버가 포함된다. 리눅스는 많은 사물인터넷(IoT) 장치에도 들어 있다. 내 자동차는 리눅스 기반으로 작동하고, 내 TV, 여러분의 알렉사와 킨들, 네스트Nest 온도 조절 장치도 마찬가지다. 한편 고성능 컴퓨팅이 필요한 분야에서도 전 세계 상위 500대 슈퍼컴퓨터가 모두 리눅스를 운영체제로 사용한다. 그렇지만 노트북과 데스크톱 컴퓨터 시장에서는 리눅스의 비중이 크지 않고 윈도우가 대부분을 차지하며, 맥OS가 뒤를 잇는다.

 

 

 

 

유닉스 연대표(위키백과)


BSD

BSD

  • 독점 분할 전 AT&T는 초기 UNIX는 대학교의 경우, 영업 비밀 보호 협약만 맺으면 사실상 무료로 사용 가능했다.
  • BSD는 원조 연구용 유닉스Research Unix*에서 발전한 두 가지 주요 갈래 중 하나다.
  • 대학에서 UNIX는 거의 무료였지만 오픈소스는 아니었기에 교육 목적으로만 사용할 수 있었고, 라이선스를 취득한 사용자는 라이선스를 보유한 다른 사용자끼리 공유해야했다. 
  • 그럼에도 불구하고 미국 내 사용자 커뮤니티가 급속히 늘어나며, 공식적인 기술 지원이 없었기에 사용자들은 서로 돕기 위해 어쩔 수 없이 뭉쳐야만 했고, 세계 전역에서도 사용자 그룹이 생겨나며 주요한 기술 혁신이 일어나는 계기가 되었다.
  • 라이선스를 취득한 단체 중 가장 적극적으로 활동한 곳은 캘리포니아 대학교 버클리(이하, UC 버클리)였다.
    UC 버클리에서는 여러 명의 대학원생이 시스템 코드에 중요하게 이바지했고, 결국 버클리 소프트웨어 배포판Berkeley Software Distribution(BSD)이 만들어졌다.

 

 

당시에 대학원생이었던 빌 조이 아직도 가장 인기 있는 유닉스 편집기 중 하나인 vi 텍스트 편집기와 C 셸인 csh가 있었다. 빌은 나중에 유닉스용 TCP/IP 네트워킹 인터페이스를 설계했는데, 이 인터페이스는 지금도 이용된다. 그가 만든 socket 인터페이스는 파일과 디바이스 입출력에 이용되던 read write 시스템 호출을 가지고 네트워크 연결에 읽고 쓰는 것을 가능하게 했다. 덕분에 네트워킹 기능을 쉽게 추가할 수 있었다.

 

소스가 공개되었던 UNIX는 많은 대학들과 연구원들에 의해 연구되어  Berkeley Unix(BSD), SYSV와 같은 계열로 분화되고, SunOS, OSF/1.AIX, HP-UX, Solaris, IRIX, SCOUNIX등과 같은 다양한 버전의 유닉스 운영체제들을 탄생되었다.

 

오늘날 리눅스(Linux)와 AIX, 솔라리스(Solaris), BSD, FreeBSD 등은 유닉스 기반의 운영체제다.  

안드로이드(Android)와 아이오에스(iOS)는 유닉스를 변형하여 개발한 운영체제이다.

윈도우는 제외한다.

 


 

C Language

 

 

POSIX (퍼식스)

 

1988년

Portable Operating System Interface for UniX, 이식 가능 운영 체제 인터페이스

 

UNIX는 다양한 형태로 발전하여

UNIX 계열 운영체제 간에 응용 프로그램의 호환성과 이식성에 어려움을 주기 시작했다.

 

이식성이 높은 유닉스 응용 프로그램을 개발하기 위한 목적으로 서로 다른 UNIX 운영체제 간에 공통 API를 정리한 

 IEEE 가 책정한 애플리케이션 인터페이스 규격  POSIX(Portable operating system interface, ‘파직스’) 표준이 탄생했다.

 

 POSIX는 운영체제 자체가 아니라 응용 프로그램과 운영체제 간의 ‘인터페이스’를 정의하는 개념이기 때문에 프로그래머는 인터페이스가 존중되는 한 운영체제와 응용 프로그램을 자유롭게 작성하여 응용프로그램의  이식성이 높다.

 <sys/socket.h> 와 같은 라이브러리를 포함한다.

 

 

 

API

Application Program Interface

운영체제와 응용프로그램 사이의 통신에 사용되는 언어나 메시지를 뜻하는 것다.

 

IEEE (아이 트리플 이)

Institute of Electrical and Electronics Engineears

미국 표준 협회(ANSI)에 의해 국가 표준 개발을 위촉받은 미국 전기 전자 학회

 


 

C 언어 표준화의 역사 - C89

C언어 표준 라이브러리는 함수 형태와 기능이 정해져 있기 때문에 개발툴별 같다는 특징이 있다. 그리고 개발 툴에서 제공하는 함수는 여러가지 부류가 있고 특성 별로 나누어 lib 파일로 코드를 제공하고 헤더파일로 선언을 알 수 있다.

 

 

 

처음 C 언어에 대한 마땅한 표준이 없어 Unix와 함께 제공됐던 라이브러리(POSIX)가 사실상 표준이나 마찬가지 였다.

 

 

1978년

브라이언 커니핸과 데니스 리치는

The C Programming Language의 초판을 집필해서 출간했다.

 

C언어를 사용하는 프로그래머에게 "K&R"로 유명한 책으로

한동안 이 책을 기준 사양으로 사용됐다.

 

 

 

 

 

1983년

C가 발전하고, 다양한 컴퓨터 시스템에 널리 사용되고

결정적으로 C 언어가 미국 정부 프로젝트를 위해 사용되기 시작하면서

미국의 표준화 기구인 미국표준협회(ANSI) 에 의해 C 언어의 표준화 논의가 시작된다.

ANSI가 K&R C를 확장 겸 표준화하기 위해 짐 브로디를 주축으로 X3J11 위원회를 소집

 

1989년

첫 번째 공식 C 표준 ANSI C(공식명칭: ANSI X3.159-1989) 표준 제정되었다.

이때 제정된 C언어 표준이라고 해서 C89라고도 불렀다.

 

C 언어는 그 자체도 중요하지만, 표준 라이브러리를 사용한다는 점에서도 중요하다.

C 언어 표준 라이브러리는 형식화된 입출력, 문자열 처리, 수학 연산 등의 작업을 위해 프로그래머가 필요로 하는 기본 수단을 제공한다. 

 

30년이 지났지만 아직도 대부분의 컴파일러가 지원하는 표준이다.

 

 

 

 

ANSI/ISO C언어 표준 (엔시 아이에스오)

American National Standards Institute, International Organization for Standardization

 

1990년

ISO C

국제표준화기구(ISO)에서도 C 표준을 채택한다.

ISO C90 표준과 ANSI C89 표준은 사실상 같은 표준이지만

사람들이 C 표준을 부를때, ANSI C라고 부르는 것은, ANSI 버전이 더 먼저 나왔기 때문이다.

The C Programming Language 2nd Ed. 는 ANSI C89 에 맞게 수정되었다.

POSIX C언어 Interface 규격 ANSI/ISO C언어 표준
<aio.h>  <arpa/inet.h>  <assert.h>  <ctype.h>  
<dirent.h> <dlfcn.h>  <fcntl.h>  <fmtmsg.h>  
<fnmatch.h>  <ftw.h> <glob.h>  <grp.h>
<iconv.h>  <langinfo.h>  <libgen.h> <monetary.h>
<mqueue.h>  <ndbm.h>  <net/if.h>  <netdb.h>
<netinet/in.h>  <netinet/tcp.h>  <nl_types.h>  <poll.h>
<pthread.h> <pwd.h>  <regex.h>  <sched.h>
<search.h>  <semaphore.h> <spawn.h>  <strings.h>  
<stropts.h>  <sys/ipc.h>  <sys/mman.h> <sys/msg.h>  
<sys/resource.h>  <sys/select.h>  <sys/sem.h>  <sys/shm.h>
<sys/socket.h>  <sys/stat.h>  <sys/statvfs.h>  <sys/time.h>
 
<sys/times.h> <sys/types.h>  <sys/uio.h>  <sys/un.h>  
<sys/utsname.h>  <sys/wait.h> <syslog.h>  <tar.h>
 
<termios.h>  <trace.h>  <ulimit.h> <unistd.h>  <utime.h>
 
<utmpx.h>  <wordexp.h>
<assert.h>  <complex.h>  <ctype.h>  <errno.h>

 
<fenv.h> 
<float.h>  <inttypes.h>  <iso646.h>

<limits.h>  <locale.h> 
<math.h>  <setjmp.h>  

<signal.h>  <stdarg.h>  <stdbool.h> 
<stddef.h>  

<stdint.h>  <stdio.h>  <stdlib.h>  <string.h>

<tgmath.h>  <time.h>  <whcar.h>  <wctype.h>
 

 

 

 

 

2019년

공식적으로 현재 시점에서 ANSI C와 ISO C는 최신 표준인 C18을 가리킨다.

ANSI가 C89/90이후 C언어 표준 제정하지 않고 ISO를 따른다.

ISO에서는 C99, C11, C18까지 계속 업데이트를 했다.

 

현재는 대부분의 표준안이 ISO 이름으로 발표, 제정되며

ANSI와 같은 각국의 표준 위원회가 받아들여 사용하는 형식을 취하고 있다.

 

Visual Studio 2019부터 C11/C17 을 공식 지원한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

참고

유닉스의 탄생 (hanbit.co.kr)

 

유닉스의 탄생

현대 운영체제의 원형인 유닉스의 역사에 관한 책. 2019년 유닉스 탄생 50주년을 맞아, 저명한 컴퓨터 과학자 브라이언 커니핸이 유닉스 탄생과 발전 과정, 천재 개발자와 기여자들의 이야기를 직

www.hanbit.co.kr

전문가를 위한 C (hanbit.co.kr)

 

전문가를 위한 C

실제 애플리케이션 개발과 유지 보수에 필요한 C의 기초 개념과 활용법, 고급 기능까지 살펴보는 C 중고급서. C와 유닉스의 역사부터 객체지향, 커널, 스레드, 프로세스, 다른 언어와 통합하는 법

www.hanbit.co.kr

 

BasicLike

어? 나 프로그래밍 좋아하네?