GNU GCC 컴파일러

요즈음은 상당히 사용자 친화적인

프로그래밍 언어가 많이 나와서

정말 누구나 남녀노소 컴퓨터로

코딩을 배울 수 있습니다.

 

코딩(Coding), 프로그래밍(Programming)

같은 비슷하면서도 다른 용어가

약간 헷갈리긴 한데 요즘에는 코딩이라는

단어를 더 많이 사용하는 것 같습니다.

 

물론 코딩을 공부하는 것은 좋은 일입니다.

 

굳이 4차 산업 어쩌고를 늘어놓지 않아도

우리의 일상적인 생활을 떠받치고 있는

각종 컴퓨터 시스템과 응용 프로그램은

모두 누군가가 프로그램을 개발하여

매일같이 유지 보수하고 있는 것입니다.

 

그 종류가 하도 많아서 어디부터

이야기하면 좋을까 모르겠습니다.

뭐 스마트폰은 적당하죠.

스티브 잡스가 2007년에 아이폰을

발표하기 전에는 사람들이 스마트폰이

없는 세상에서 잘먹고 잘 살았습니다.

하지만 이제는 스마트폰 없이

그러긴 힘들 겁니다. 스마트폰은

단순한 디지털 통신수단이 아니라

이제는 직업이나 산업에 도입되어서

이게 없이 경제가 안돌아가게 되있습니다.

 

컴퓨터 네트워크의 관점에서 스마트폰은 

하나의 단말기이자 독립된 프로세서를

사용하는 클라이언트입니다.

스마트폰에서 사용하는 편리한 서비스는

구글이나 애플이 서버를 운영하지

않는다면 무의미한 것들 입니다.

 

하지만 사용자들은 서버가 뭔지 몰라도

즐겁게 게임을 하고 인터넷을 할 수

있습니다. 서버가 터졌을 때만 서버의

존재를 인식하게 되지요.

 

이런 서버의 프로그램을 만들고

유지보수하는 측을 백엔드라고 하는데

backend - 뒤쪽 끝에 있다는 뜻입니다.

우리의 스마트폰은 서버에 요청을 하고

응답을 받아오는 클라이언트, 그리고

앞쪽에 있다고 해서 프론트엔드라고 합니다.

frontend - 앞쪽 끝, 단말기와 비슷한 말

 

처음에는 쉬워보여서 프로그래밍을

시작했다 하더라도 이렇게 조금만

그 안쪽을 들여다 보면 엄청나게

방대한 컴퓨팅 세계에 주눅이

들기도 하는데요.

 

물론 이런 원리같은 것에 별로

관심이 없다면 무시해도 상관은 없습니다

 

 

내부 동작과 원리를 잘 몰라도

코딩을 하는데는 문제가 없습니다.

포토샵이나 프리미어 같은 전문적인

응용 프로그램을 사용할 때도

컴퓨터의 내부가 어떻게 돌아가는지

네트워크가 연결된 방식이라던가

거의 알필요가 없습니다.

 

컴퓨터가 갑자기 뻑이 나는 등

문제가 생겼을 때는 컴퓨터 지식이

필요해지는데 그것도 전문 AS기사가

있기 때문에 사용자는 그것을

알 필요가 없습니다.

 

이런 것은 컴퓨터의 가상화 기술(Virtualization)

때문에 가능하게 된 것 인데요.

어려운 말 같지만 운전을 하는 것과 같습니다.

 

자동차의 원리를 몰라도 악셀 패달을

밟으면 앞으로 나가고 브레이크로 멈추고

조향장치(휠)를 돌리면 방향을

틀 수 있다는 것만 알면 90% 이상

자동차를 운전할 수 있습니다.

 

추상화(Abstraction)와 가상화(Virtualization)

 

추상화(Abstraction)와 가상화(Virtualization) | 컴퓨터구조

추상화와 가상화는 무엇인가? 컴퓨터 공학을 제대로 이해하기 위해서 알아야 할 가장 핵심적인 용어다. 추상성을 클래스화 해버리는 객체지향 프로그래밍은 물론 현대 소프트웨어의 큰 방향성

digiconfactory.tistory.com

 

또 운전은 일종의 테크닉이기 때문에

레이싱 드라이버는(혹은 택시기사님들은)

자동차를 설계한 사람이나

자동차를 조립하는 사람들보다

훨씬 운전을 잘 합니다.

 

*포토샵의 장인은 이를 활용하는

디자이너가 되고 포토샵 프로그램의

설계자나 개발자는 아닐 겁니다.

 

*이런 서두의 잡소리를 왜 하는가?

 

마찬가지로 소프트웨어 기술도

일종의 장인의 영역이라 볼 수 있습니다.

누구나 만들 수 있는 프로그램이 있고

또 그 아래에는 장인의 영역이 있습니다.

 

드롭박스의 창업자 드류 휴스턴은

프로그래밍은 피아노를 치는 것과 같다고

인터뷰하기도 했는데요. 일찍이 연습과

실전을 통해서 프로그래밍 기술을

갈고닦는 것의 중요성을 이야기 했습니다.

 

해서 소프트웨어를 공부하다 보면

필연적으로 넘어야할 것 같은 산이 있는데

개인적 의견으로 GNU GCC 라고 생각합니다.

 

GNU는 1980년대 초에 리처드 스톨만이

시작한 자유 소프트웨어 운동으로 지금의

오픈소스 커뮤니티의 창시자? (교주?) 정도

되는 인물입니다.


지금이야 인터넷에서 수많은 무료 라이센스의

소프트웨어를 다운로드 받아서 그냥

사용하는게 당연한 시대가 되어서

리처드 스톨만의 주장이 와닿지

않을 수 있습니다만, 당시에는 모든

소프트웨어에 엄청 비싼 가격이 매겨져 있어서

그것을 사용하는 것은 극소수의 기업,

기술자만 가능한 시대였습니다.

 

쉽게 말해 당시에 C언어를 배우려면

일단 컴퓨터 하드웨어가 비쌌는데

특히 80년대 중반 메인프레임 컴퓨터인

유닉스 시스템은 초기 가격이 5000달러로

오늘날 물가로 환산하면 약 2천만원

정도였다고 하니 소프트웨어 가격까지

합치면 서민들은 거의 배우는게 불가능합니다.

 

보급형 컴퓨터인 코모도어나

애플의 MSX 같은 범용 (주로 게임기)

컴퓨터를 출시하기 시작했지만

이는 베이직 정도의 기초 프로그래밍

언어를 사용할 정도라서 운영체제를

만들어 버리는 C언어에 비하면

학습적으로는 배울게 없었습니다.

(다만 리처드 스톨먼에 영감을 받은 많은

고인물들이 어린 시절에 코모도어로

프로그래밍을 시작했다고는 합니다)

 

이러한 정보기술의 접근성은 이후

본격 IT시대가 열리면서 많은 사람들의

운명을 바꾸어 놓기도 했습니다.

 

일례로 마이크로 소프트의 전 경영자

빌게이츠는 중학교 시절 학교에서

모든 미국의 학교에도 몇 안되는

수만달러 짜리 컴퓨터가 있었는데

그런 컴퓨터의 성능은 당시

정부기관에서나 사용할 정도였다고 합니다.

 

이것을 사용하다 보니까 빌게이츠와

폴앨런은 이미 고등학교를 졸업하는

시점에 웬만한 대기업의 기술자보다

컴퓨터 기술을 숙련할 수 있었고

이는 두사람이 MS를 창업하게된

첫번째 계기이자 운명이라고 후에

인터뷰하기도 합니다.

 

프로그래머 였던 리처드 스톨먼은

자본가들이 컴퓨터와 정보 기술을

독점하는 것에 불만을 품고 있었고

그것의 결과물이 GNU 프로젝트입니다.

 

뭐 스톨먼의 세부적인 일화는

엄청 많이 있지만 너무 옛날 이야기이고

소프트웨어에 도덕성과 철학을 들고와서

논쟁의 대상이 되기 때문에

호불호가 있는 인물입니다.

일종의 정치인이죠.

 

리누즈 토발즈도 정치적으로 보이기도

하는데 하지만 리누즈는 뭔가 밈같이 보이고

IT회사를 욕하는 것도 재미있습니다.

(Nvidia fxck you)

욕을 해도 뭔가 전혀 공격적이지 않고

딱히 세계정복 같은 것을 노리지 않아서

많은 사람들이 리누즈를 좋아합니다.

엔비디아 포유 리누스 토발즈
엔비디아 포유 리누스 토발즈

 

리누스 토발즈는 90년대에 Unix-Like(유닉스 계통)의

커널인 Linux를 개발해서 GNU Project에

통합되었습니다. 이는 무료 소프트웨어로

GNU는 정의가 헷갈리는데 재단의 정의에

따르면 GNU가 운영체제 그 자체입니다.

 

소프트웨어라는게 한 사람이나 한 기업의

아이디어에서 나온게 아니라

수많은 기술자들의 손을 거쳐서

후대로 넘어가기 때문에

언뜻 보면 뒤죽박죽으로 보입니다.

 

예를 들어 C언어를 중심으로 가닥을 잡으면

C언어는 처음에 벨연구소의 데니스 리치가

켄톰슨의 B언어를 기반으로 개발했습니다.

최초의 목적은 유닉스 운영체제를

개발하는 것 이었습니다.

 

그런데 데니스 리치가 개발한

C언어는 당연히 무료가 아니었습니다.

C언어라는 개념 자체는 누구나

생각하고 구현할 수 있지만 소프트웨어인

C컴파일러는 무료가 아닙니다.

벨연구소의 지적재산권이지요.

 

C언어의 표준을 ANSI가 제정하고

이 표준을 따라서 다시 만든 C언어

컴파일러가 gcc 컴파일러입니다.

리처드 스톨만도 무료 운영체제를

만들려고 했기 때문에 원래는 C언어로

시작했는데 후에는 콜렉션을 만들어서

ADA, 포트란, 자바(초기 버전) 등을

통합하였습니다.

 

리눅스 + 각종 GNU 도구들이

(컴파일러, 유틸리티, 드라이버 등)

포함되어 있는 것이 GNU 운영체제입니다.

 

마이크로소프트의 윈도우나 애플사의

Mac OS와 달리 누구나 개발에 참여할 수

있고 공개된 원본 소스코드를 가져다가

사용할 수 있습니다.

 

물론 오픈소스를 사용해서 상업적으로

사용하는 것도 가능한데 새로 개발한

소스코드의 공개범위에 대해서는

저작권상 규칙이 있습니다.

 

그러니까 사용자가 운영체제나 각종

응용프로그램의 소스코드를 수정할 수 있는

권리 조차도 운영체제에 포함된다고

생각하는 개념이 GNU 입니다.

 

그래서 돈을 받고 소프트웨어를 판다는

개념으로 접근하면 이해하기가 어렵습니다.

(불법 소프트웨어나 콘텐츠를 다운받는 사람이라도;)

윈도우는 MS사가 만들어 주고

IOS는 애플이 만드는 것 아니냐?

스톨먼의 의견은 아니라는 것 입니다.

원래부터 해커였던 사람의 생각은

아무리 IT가 발달한 지금이라도

사회적으로 쉽게 받아들여지지는

세상은 아닙니다.

 

약간의 비판

IT근로자들이 만드는 코드가 기존에

있는 레가시의 노가다라고 할 지라도

그것은 노동 자체의 의미가 있습니다.

 

모든 사람이 새로운 아이디어로

세상을 바꿔가는게 궁극적으로

옳은 일인지도 모르는 일이지요.

 

사람들이 IT업계에서 새로운 기술을 빨리

만들어 주기를 목이 빠지게 기다리는

시대긴 하지만 그건 조급함이고

어차피 IT는 눈이 부시게 발전해갈건데

단지 시간이 필요할 뿐입니다.

 

개인적으로는 스톨먼을 전혀 싫어하거나

그런 의견은 없습니다. 다만 컴퓨터를

공부하다 보면 자연스럽게 언젠가

GNU라는 난관에 봉착하게 되는데

호불호보다는 이해하기가 어려운

이야기를 많이 한다. 시대를 앞서간 사람이다.

그 정도로 보고 있습니다.

 

이 IT 짭블로그에 GNU GCC 포스팅 시리즈를

기록하는 것은 GCC 컴파일러를 공부하면

좀 더 이 시대의 흐름과 소프트웨어의

철학을 이해할 수 있지 않을까 해서 입니다.

 

결론적으로 말하면 GNU GCC를

배운다는 것은 멋진 일이다고 생각합니다.

이런 자료들은 국내 대형 서점에도 없어서

인터넷을 뒤져서 찾아봐야 하는데

구글 등을 검색하다 보면 자유 소프트웨어답게

메뉴얼과 공식문서(Doc) 들을 구할 수 있습니다.

 

영문 전자책 무료로 다운로드 하기 | 컴퓨터 전자책

 

영문 전자책 무료로 다운로드 하기 | 컴퓨터 전자책

정보의 시대 우리는 정보의 홍수의 시대에 살고 있습니다. 분야를 막론하고 정보를 취급하는 능력이 중요한데요. 우리나라도 과거에는 좋은 대학에 나오고 좋은 직장에 들어갈 수 있다면 언제

digiconfactory.tistory.com

 

영어라서 해석에 시간이 걸리긴 하지만

어차피 코드는 영어로 치는 거니까

치다보면 익숙해집니다.

 

GCC 컴파일러를 시작으로 종종

GNU프로젝트에 대해서 다뤄 봐야겠습니다.

 

다음 포스팅은 GCC 컴파일러의 사용법입니다.

 

GCC 컴파일러를 배우면서 그 동안

모호했던 상당히 많은 것들이

명확해지는 느낌을 받습니다.

 

어떻게 보면 IDE 사용법을 배우기 전에

처음부터 배우면 좋지 않았을까

소프트웨어를 만드는데 소프트웨어에

의존하는 방식이 나쁜건 아니지만

원리를 이해하려면 어렵기 때문에

뭔가 삽질한 기분도 듭니다.

 

최근에는 윈도우10에서도 리눅스를

사용하는 방법이 있으니 관심이 있는데

윈도우를 사용한다면 WSL2도 좋습니다.

혹은 WSL2보다 좀 느리긴 하지만

VMWare를 사용하여 리눅스를 설치하는

방법도 있습니다. 근데 설치과정도 그렇고

확실히 WSL2가 빠르긴 합니다.

 

윈도우11에 들어와서 GUI까지

업데이트를 했기 때문에 장점이 많죠.

 

GCC를 공부하기 위해 가상머신을

사용하는 것은 괜찮은 방법입니다.

윈도우에서 MinGW를 사용하는 방법도

있지만 윈도우를 위해 포팅한 것은

커맨드 명령어도 그렇고 헷갈립니다.

먼저 리눅스에서 GCC에 익숙해진후

윈도우에서 사용하는 순서가

학습적으로 맞을지도 모르겠네요.

 

 

WSL2로 윈도우10에 리눅스 설치하기 / 리눅스용 윈도우 하위 시스템

 

WSL2로 윈도우10에 리눅스 설치하기 / 리눅스용 윈도우 하위 시스템

WSL2 설치하기 WSL2는 윈도우10에서 리눅스를 사용할 수 있는 시스템 소프트웨어입니다. 그동안 윈도우를 설치한 PC에서 리눅스를 사용하기 위해서는 멀티 부팅 기능을 사용하여 하드 파티션을 나

digiconfactory.tistory.com

윈도우11 WSL2에서 리눅스 GUI 사용하기 WSLg - 사용성 (tistory.com)

 

윈도우11 WSL2에서 리눅스 GUI 사용하기 WSLg - 사용성

윈도우11 WSL2 현재의 사용성 윈도우11의 WSL2 버전은 기존 윈도우10 버전과 차이가 있습니다. 가장 주요한 차이점은 윈도우11에서는 WSLg로 리눅스의 gui 시스템인 x11과 wayland 를 지원한다는 점입니다

digiconfactory.tistory.com

The GNU Operating System and the Free Software Movement

 

The GNU Operating System and the Free Software Movement

GNU is the only operating system developed specifically to give its users freedom. What is GNU, and what freedom is at stake? Fight to Repair: A video from the FSF What is GNU? GNU is an operating system that is free software—that is, it respects users'

www.gnu.org

 

 

 

공유하기

facebook twitter kakaoTalk kakaostory naver band