본문 바로가기

 

 

GNU

 

1971년

리차드 스톨만이 MIT에서 직업 연구활동을 시작했던 시절은

상업적인 컴퓨터 회사들 조차도 자유 소프트웨어를 배포하던 때였으므로

프로그래머들은 아무런 제약없이 서로 협력할 수 있었다

 

 

1983년

그러나 1980년대에 소프트웨어들은 소유와 독점에 관한 법률에 의해서 제한되었으며,

소유권자들은 소프트웨어의 자유로운 이용을 통한 사용자들의 상호 협력을 그들의 권리를 내세워서 금지시켰다.

 

바로 이것이 GNU 프로젝트가 시작된 이유였다.

GNU "GNU is Not Unix" 는 유닉스와 같은 운영체제를 만들되, 

유닉스와 달리 소유권이 없는 GNU 를 만들겠다는 것을 의미한 것이다.

 

 

1985년

GNU 프로젝트를 지원하기 위해 자유소프트웨어재단(FSF : Free Software Foundation)을 설립했다.

 

모든 컴퓨터 사용자들은 운영체제가 필요하다.

만약 자유롭게 사용할 수 있는 운영체제가 없다면

컴퓨터를 사용하고자 하는 모든 사람들은 독점적인 상용 운영체제를 이용할 수밖에 없다.

따라서, 자유 소프트웨어에 대한 첫번째 과제는 자유 운영체제를 만드는 것이다.

 

GPL License 

GNU General Public License

무료 소프트웨어가 공짜를 의미하는 것이 아니다.

그럼에도 불구하고, 무료로 오픈된 소스를 자기 입맛에 바꿔 수정한 뒤,

배포하고 누군가에 의해 소유권이 있는 소프트웨어로 전락한다면,

무료 소프트웨어 운동에 대한 철학을 위배하는 것이다.

 

이를 막기위해 리차드는 "CopyLeft"와 "CopyRight" 개념을 도입했다.

GNU General Public License라는 자격증명을 가진 무료 소프트웨어는 수정되어 배포되더라도,

그 수정된 버전 역시 GNU 라이센스 안에서 무료 소프트웨어의 철학을 위배해서는 안된다.

 

 

1990년대

자유 운영체제에 대한 우리의 첫 번째 계획은 1990년대에 와서 실현되었다. 

커널을 제외한 주요 부분들을 새롭게 작성하고 취합하던 과정에서 우리는 리누스 토발즈(Linus Tovalds)에 의해서 리눅스가 개발되고 있다는 사실을 알게 되었고, 리눅스는 곧 GNU와 합류하게 되었다. 

 

자유 소프트웨어인 리눅스 커널과의 결합으로 GNU 시스템은 독립된 운영체제로서의 완성된 모습을 갖출 수 있었고 슬랙웨어와 데비안, 레드햇과 같은 GNU 시스템에 기반한 많은 운영체제들이 이제는 수십만에 달하는 사용자를 갖게 되었습니다. 

 

 

Linux

리눅스는 리누스 토발즈의 취미 프로젝트가 어떻게 심지어 빌게이츠조차 무시하지 못하게 되었을까?

리눅스가 세상에서 빛을 발휘할 수 있었던 것은 비즈니스에서 채택되어 필수 기술의 토대가 되었기 때문이다. 

 

1995년

인터넷이 막 도입된 시기는 리눅스의 발전에 중요한 터닝포인트이다.

아파치(Apache) 웹서버는 비즈니스 사회에서 리눅스를 사용하는 것이 회사에 이득이 될 수 있다는 것을 보여준 첫 애플리케이션이었다.

 

비싼 WindowsNT와 Unix를 사지 않고도 컴퓨터 네트워크를 구성할 수 있게 되었다.

회사가 할 일은 이제 리눅스에 정통한 전문가를 고용하거나 관련 인력을 양성하면 되는 것이었는데,

대학생들과 리눅스를 옹호하는 사람들이 이미 리눅스에 익숙한 사람들이 많았기 때문에 관련 비용을 절약할 수 있었다.

 

 

 

GCC  & MSVC

 

GCC = UNIX/LINUX 개열 OS의 컴파일러

MSVC = Windows OS 컴파일러

 

GCC 

GNU Compiler Collection

gcc 는 GNU 프로젝트에 의해 만들어진 오픈소스 컴파일러 컬렉션이다.

UNIX/LINUX 계열 OS의 플랫폼의 사실상 표준 컴파일러다.

 

처음에는 C 컴파일러를 의미하였으며 GNU C Compiler 의 약어였다.

기능이 추가되면서 현재 C언어 이외에도 C++, Objective-C, Fortran, Go, Ada 등의 다양한 언어를 지원하는

컴파일러 모음(GNU Compiler Collection)이다.

 

GNU 진영에서는 gcc 로 컴파일을 하고 Make를 이용해 빌드하는 것이 일반적이다.

gcc 는 한마디로 GNU에서 개발된 ANSI C 표준을 따르는 C 언어 컴파일러라고 말할 수 있습니다.

gcc는 ANSI C 표준에 따르기는 하지만 ANSI C 표준에는 없는 여러 가지 확장 기능이 있습니다.

또한 gcc는 통합개발환경(IDE)을 가지고 있지 않은 command line 컴파일러입니다 

 

원래는 C로 구현되었으나 2013년에 구현 언어를 C++로 모두 변경하였다.

 

 

MSVC 

(Window) MicroSoft Visual C++

Visual Studio는 1997년부터 현재까지 마이크로소프트가 배포 및 판매 중인 통합 개발 환경이자 통합 패키지

임. Visual Studio는 개발 편의성을 제공하는 IDE역할도 하지만 동시에 Compiler 역할도 수행

Viual Studio에 default로 탑재되는 컴파일러는 MSVC(Mircosoft Visual C++)

 

MSVC는 약자 그대로 C언어 컴파일러에 해당하진 않고 C++ 컴파일러

C++은 C언어 문법을 포함하기에 C 컴파일

하지만 C++는 C를 완전히 포함하지 않음.

 

MS 공식 사이트에도 MSVC의 단점으로  C언어 사양(C99, C11, C18)의 업데이트 지원이 부족한 점을 명시하고 있다.

제대로 C언어를 공부하기 위해서는 비주얼 스튜디오 환경에서 실습하지 않는 것이 좋다.

MS-EULA 라이선스이다.

 

Cross Compile 등과 같이 OS 호환 개발작업을 진행할 시

컴파일러가 OS에 의존되면 작업이 어려워진다.

 

GCC 또는 MSVC 컴파일러 중 하나로 UNIX/LINUX/Windows가 지원되야하는데

GCC의 경우 MSVC보다 컴파일러 표준을 잘 지키고 개발기간도 오래되어

모든 OS에서 GCC 컴파일러로 개발되고 있다.

 

 

MinGW & WSL2

 

Cygwin

gcc 를 윈도우에서 실행 할 수 있도록 재 포팅한 것이다.

Cygwin은 POSIX 환경을 windows에 구현해서 운영체제와 실행 파일 사이의 가상머신이 동작함.

가상머신은 Windows OS에 없는 유닉스 계열 운영체제가 제공하는 기능들을 제공하는 역할을 함.

리눅스 용으로 작성된 코드를 별 무리 없이 Windows OS에서 컴파일 할 수 있지만, 가상 환경인 만큼,

프로그램이 무겁고 실행 속도가 느리며, libcygwin.dll 라이브러리에 의존함. 

 

 

MinGW

Minimalist GNU for Windows

Cygwin에서 분화 된  Windows에서 GCC를 사용할 수 있도록 해주는 gcc 기반 개발 컴파일러다.

 

Cygwin 는 일종의 가상머신으로 윈도우 위에 POSIX 레이어를 새로 얹어 상당히 무거운 반면,

MinGW 는 POSIX 호환성을 포기한 대신 윈도우 환경과 네이티브로 연결되기 때문에 더 빠른 성능을 제공한다.

 

하지만, 성능을 얻은 대신, GCC가 제공하는 일부 라이브러리(특히 POSIX 표준)를 사용할 수 없다

이런 이유로 유닉스에서 POSIX API를 이용하는 소스 코드를 작성했을 경우 MinGW로는 컴파일이 불가능하다.

와이드바이트 관련 예약어나 함수(wchar_t, wprintf(), wcstok() 등)가 대표적인 예이다.

 

윈도우에서 유닉스의 터미널 환경을 제공해 주며 이를 통해 MinGW와 GCC를 설치하는 것이다.

 

 

WSL2

Windows Subsystem for Linux

리눅스 API가 윈도우 커널 내부에 직접 탑재되어, 윈도우에서 POSIX API 환경 기반으로 작업이 가능하다.

 

 

Clnag

LLVM/Clang Clnag은 LLVM 프로젝트 중 하나이다.

C, C++, Objective-C를 지원한다.

C/C++ 표준을 잘 지원하고 GCC의 GPL과 달리 소스코드 공개 의무가 없다.

GCC의 GPL 라이선스로 인해 GCC를 대신해서 많이 대체되고 있다.

GCC와 달리 윈도를 공식 지원한다.

UIUC 라이선스다.

 

 

참고 

Cygwin의 기능은 WSL로 확실히 대체되었지만

MinGW는 윈도우 환경을 그대로 유지하되 리눅스 명령어만 사용해야 할 경우

유용하게 쓰일 수 있어 여전히 필요성이 있는 소프트웨어이다.

 

 

BasicLike

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