출처 : 코드잇
수정 : hwany
GitHub에는 훌륭한 프로젝트들이 많다. 그리고 이런 프로젝트는 대부분 그 소스 코드가 공개되어 있다.
이렇게 소스 코드가 공개되어 있는 프로젝트를 '오픈 소스 프로젝트(open source project)'라고 하는데,
‘오픈 소스’가 뭘까? 간단히 설명하자면 프로그램의 소스 코드가 대중에 공개된 상태일 때 오픈 소스라고 한다.
오픈 소스라는 용어의 의미는 그것이 생겨난 역사적 배경을 살펴보면 좀더 잘 이해할 수 있다.
오픈소스의 역사
아주 오래 전에 프로그램이라고 하는 건 그 소스 코드를 공개하고, 공유하고, 그 원리를 아는 사람이 모르는 사람에게 가르쳐주는 게
당연한 존재였다.
하지만 컴퓨터 프로그램 시장이 발전하면서 특정 회사가 어떤 프로그램을 만들고 그 사용료 등을 받는 것이 일반화되기 시작했는데.. 이런 변화와 함께 프로그램의 소스 코드들은 점점 그 프로그램을 만든 회사만 갖고 있고 공개되지 않기 시작했다.
그러니까 내가 고객으로서 어떤 회사의 프로그램을 쓰더라도 그 프로그램의 소스 코드를 볼 수는 없게 된 겁니다.
하지만 이런 움직임에 반해 1983년 ‘리차드 스톨만(Richard Stallman)’이라고 하는 MIT의 연구원이 '자유 소프트웨어 운동'이라는 걸 시작했다.
아주 오래 전 소스 코드를 공유하던 문화로 돌아가자는 취지의 운동이었는데,
그는 곧이어 '자유 소프트웨어 재단(Free Software Foundation)' 이라는 걸 세우고 이러한 운동을 조직화했다.
자유 소프트웨어 재단에서 소프트웨어는
- 그 소스 코드가 공개되어야 하고
- 누구나 코드를 자유롭게 가져다가 사용할 수 있고
- 원래의 코드를 자신이 원하는 대로 수정할 수 있어야한다
는 정신이 강조되었고, 그러한 정신에 부합하는 프로그램들이 그 운동 속에서 많이 만들어졌다.
그 중 대표적인 프로그램은 바로 'GNU 리눅스'라고 하는 운영체제다.
그런데 이런 자유 소프트웨어(Free Software)라는 명칭에 대해서는 그 의미가 확실하지 않다는 몇몇 논란이 있었고, 이러한 성격의 소프트웨어를 가리키기 위한 다른 용어로 ‘오픈 소스 소프트웨어’가 제시되었다.
이런 역사적 흐름을 거쳐 오픈 소스 소프트웨어라는 개념이 생기고 정착하게 된 것이다...!
들어봤을 수도 있는 유명한 오픈 소스 소프트웨어에는
- numpy(이전 영상에서 살펴본 파이썬 수치 계산용 라이브러리, https://github.com/numpy/numpy)
- Linux(위에서 말한 리눅스, https://github.com/torvalds/linux)
- MySQL Server(데이터베이스 프로그램, https://github.com/mysql/mysql-server)
- WordPress(설치형 블로그 프로그램, https://github.com/WordPress/WordPress)
- React Native(페이스북에서 만든 모바일 UI 프레임워크, https://github.com/facebook/react-native)
- Vue.js(웹 UI 프레임워크, https://github.com/vuejs/vue)
- Tensorflow(머신러닝 프레임워크, https://github.com/tensorflow/tensorflow )
등이 있다.
많은 유명 프로그램들이 사실은 이런 오픈 소스 프로젝트로 개발되고 있는 경우가 꽤 많다.
하지만 오픈 소스라고 해서 사용할 때 항상 아무런 제약이 없는 것은 아니다..!!
왜냐하면 사실 오픈 소스에도 다양한 종류의 라이센스(open source license)들이 있기 때문!!
예를 들어 어떤 오픈 소스 라이센스 중에는
- 오픈 소스가 활용된 부분이 있는 코드라면 그 코드도 마찬가지로 오픈 소스로 공개해야 한다.
- 기존의 오픈 소스 내용 중 조금 수정해서 사용한 부분이 있다면 그것을 표시하고 써야 한다.
같은 제약이 있는 것들도 있다.
그럼 오픈 소스 프로젝트는 어떤 장점이 있을까?
- 무료로 사용할 수 있다.
- 여러 개발자들이 참여하기 때문에 폐쇄적으로 코드를 관리할 때보다 코드의 신뢰도가 더 높다.(이 부분은 사람마다 의견이 다를 수 있습니다)
- 오픈 소스 프로젝트에 참여 중인 다른 개발자들에게 질문을 할 수 있다.
- 어떤 프로그램을 개발할 때 특정 분야에서 사실상 표준처럼 사용되는 오픈 소스 프로그램을 많이 활용할수록 전체 개발 속도를 단축시킬 수 있다.
반면에 단점은
- 참여자 수가 많지 않거나, 참여자의 실력이 좋지 않으면 소스 코드의 신뢰성을 보장하기 어렵다.
- 해당 오픈 소스를 사용해서 문제가 생겼을 때 보상을 해주거나, 책임을 질 주체가 없다.
등이 있다. 오픈 소스라고 무조건 좋은 것은 아니기 때문에 충분히 공신력 있는 오픈 소스 프로젝트인지를 따져보고 사용해야 한다.
GitHub는 이러한 오픈 소스 프로젝트들이 많이 있는 사이트이다. 여기서 어느 정도 공신력이 있는 오픈 소스 프로젝트의 경우에는 Facebook이나 Google같은 세계적인 IT 회사의, 실력있는 개발자들이 만든 코드를 자유롭게 살펴볼 수 있고 공부할 수 있다.
그래서 사실 개발자들에게 GitHub만큼 좋은 공부 장소가 없다고들 한다! 자신이 관심있는 분야의 오픈 소스 프로젝트의 코드를 분석하거나, 좀더 나아가 오픈 소스 수정에 기여할 수 있다면 그 중에 이루어지는 성장은 긍정적일 것이다.
'DevOps > Git' 카테고리의 다른 글
4. 커맨드 모음 (0) | 2021.10.01 |
---|---|
2. 브랜치 다루기 (0) | 2021.09.26 |
1. Commit 다루기 (0) | 2021.09.21 |
0. GIT & GIT_HUB 시작하기 (0) | 2021.09.11 |
마크다운 사용법 (4) | 2021.09.05 |