정의 : 컴퓨터 머신에게 사용자가 어떤 목적에 알맞게 명령,지시할 수 있는 명령과 관련된 데이터들의 집합
1) 본인이 새로운 소스, 알고리즘등을 개발한다.
2) 무조건 바로 open 하는것이 아니라, 어떤 커뮤니티에서 reviewer 들이 리뷰를 한다.
3) 해당 소스가 리뷰어들을 통해 accept 되거나 또는 reject 된다.
4) accept 되면 오픈된다. 그러면 다른 사람들은 오픈된 해당 소스(오픈소스)를 복사해서 사용하든, 수정하든, 배포하든 한다.
정의 : 소스코드가 공개되어 있는 SW 를 말하며, 일반적으로 "자유롭게 복제/배포/수정"할 수 있다.
=> "자유롭게 복제/배포/수정" 할 수 있지만, 규칙 및 규약(obligation) 을 잘 지키며 써야한다!
=> 창작물을 만들었을때, 그 창작물에 대한 사용할 권한, 수정할 권한, 배포할 권한등이 있을 것이다. 이러한 다양한 권한이 바로 저작권이고, 이는 창작자에게 자연발생적으로 주어진다.
license (라이선스)란 창작물을 사용할 권한을 의미
창작물을 만들었을 때 어떤 특정 방식의 배포, 사용등의 허가(permission) 을 사용자에게 제공할 것인지에 대한 permission 들의 집합
만일 라이선스에 적힌 사용 방식을 어기게되면, 해당 소스를 사용할 권한도 잃게되고, 법적 책임도 져야함
정의 : 소프트웨어 소유자(licensor) 와 사용자들(licensee) 간의 계약
=> 위반할 경우 라이선스 위반 및 저작권 침해로 이에 대한 법적 책임을 져야함
cf) 구글링 하다보면 가끔씩 소스코드가 있는데, 라이선스가 없는 것들이 있다. (Unknown license)
=> 주의!) 저작권이 없는것이 아니다. 저작권은 자연발생적으로 발생하므로 있는것이고, 라이선스는 없으므로 해당 소스를 사용할 권한이 없는 것이다. 사용하면 안된다!
사용 조건이 제한적이고, 수정이나 재배포는 허용되지 않는 소프트웨어
일반적으로 소스 코드가 비공개되며, 대중에게 소스가 공개되지 안는 바이너리 형식으로 제공됨
=> ex) window 10 을 구매해도 소스를 제공받는 것이 아니라, 바이너리 형식으로 제공되는 것이다.
소유권을 사는 것이 아니므로, 수정이나 배포가 불가능함
- 소프트웨어가 소스코드 비공개로 전황되는 것에 대한 반발로 자유 소프트웨어 운동이 일어남
1) 어떤 목적이던지 그 프로그램을 수행할 수 있는 자유
2) 소스코드를 분석할 수 있고 수정할 수 있는 자유
3) 그 복사본을 다른 사람에게 배포하고 줄 수 있는 자유
4) 내가 수정한 버전에 대해서 또 다른사람에게 다시 배포하고 줄 수 있는 자유
- GNU 프로젝트는 컴파일러, 편집기, 디버거 등 프로그래밍과 컴퓨터 운영에 필요한 다양한 도구를 개발
- 실질적인 결실은 리눅스 커널과의 결합에 의해 완성
cf) linux 정식명칭 : GNU linux
=> Copyleft license 의 대표적인 예시 : GPL
GPL (정식명칭 : GNU GPL) 특징
1) free software 의 정의, 4가지 특성을 보장
2) 해당 소스로 만들어진 수정물도 역시 동일한 라이선스하에 배포되어야 한다. 즉, 소스코드를 공유 및 공개해야 한다!
3) license progagation => 아래에서 설명!
=> 그렇다면, 리눅스도 GPL 인데, 리눅스 위에서 만들어진 소스들도 모두 다 공개해야 하는가? : 이래서 나온 에외 조항이 있다.
완화된 GPL ( <=> SGPL(Strong General Public License))
cf) 위에서 살펴본 GPL 이 SGPL 이다.
GPL 이므로 소스코드를 공개해야하는데, 공개정도 약간 완화된 라이선스
많은 기업들이 free software 를 거절한 이유
1) 애매모호한 문제 : 대중들에게 소프트웨어를 무료로 제공해준다는 인식 때문에 기업들이 싫어했음
2) 강력한 GPL 조항 (propagation 문제)
Open Source
- 소스코드 공개에 보다 많은 참여를 이끌어내기 위해 "자유 소프트웨어" 라는 용어를 대체할 새로운 용어가 논의되었음
- 에리 레이먼드는 오픈소스(Open Source) 라는 새로운 용어를 제안했다
차이점 : Free Software 의 문제점이라 할 수 있는
강력한 GPL 조항인 "같은 라이선스로 너의 소스코드도 공유해라" 라는 문제점을 없앤것이 Open Source 이다!
소스코드를 받아서 자유롭게 사용하는 것은 Free Software 와 거의 비슷하되, Obligation (강력한 GPL 조항) 에서 차이점을 보인다.
Open Source 는 공개하지 않아도 됨. 다른 라이선스로 바꾸든, 돈주고 팔든 맘대로 해도된다.
공통점 : 비영리 기관이며, 자유롭게 사용할 수 있다는 점에서는 거의 유사
차이점 : 공개여부,
Free Software 의 전파를 위해서 copyleft license 를 활용
Open source 는 다양한 기업의 참여를 이끌어내기 위해, re-license 할 수 있는 권한, 즉 permissive license 를 포함한다.
Copyleft license : 어떤 free software 를 다운 받고 소스코드와 다양한 권한들이 주어질 것이다. 근데 Obligation 이 있는 것이다.
(=> 어떤 Obligation 인가? : 저작자 표시는 공통 이행사항이며, 너도 동일하게 소스코드를 공개하고 이 소스코드에 대한 권한을 다른 사람에게도 주는 것)
Permissive license : 권한을 받고, 오픈 안해도 되는것
FOSS(Free and Open Source Software) : Free Software 와 Open Source Software 두 개의 소프트웨어의 차이는 Obligation 에서 차이가 있었다. 이 두개의 차이점을 두고 구분하지 않는 것이다.
Freeware : 재배포 가능하고 자유롭게 쓸수있는 소프트웨어 이지만, 소스코드가 제공되지 않아서 수정할 수 없는 것
Shareware : 마찬가지로 자유롭게 사용가능하되, 사용하다보면 돈에 따라서 기능에 제한되거나, 또는 시간적으로 제한되는 것 등이 있는 것
=> Freeware 와 Shareware 는 FOSS가 아니다!
Freeware의 경우 소스코드가 없어서 Freedom 이 없고, Shareware의 경우도 제한되는 것들이 있어서 Freedom 하지 않다.
저작권(copyright) 에 의해 보호받는 창작물에 대한 권한을 다른 사람들에게 자유롭게 사용할 수 있도록 권한을 주는 계열이 바로 FOSS이다.
Foss 외에는 사유 소프트웨어이다.
저작권 보호가간이 만료되었거나, 작자 미상인 경우에 자유롭게 사용할 수 있는 것 (즉, 저작권 보호기간도 벗어났고 작자미상이므로 저작권이 없는 창작물이다!)
cf) 오픈소스가 아니다! 오픈소스는 저작권 법 내에있는 소프트웨어이다.
1) lower costs (저렴한 비용)
2) reduced development time and expense (개발시간과 비용 감축)
3) reliability and quality (신뢰성과 퀄리티)
4) availability of external support (외부 지원)
5) reduces "vendor lock-in" (lock-in 되는 것을 방지)
not user-friendly
Risk to intellectual property
Hidden costs (잠재적인 비용)
소스코드가 방대해지면 개발 방법론에 변화가 있어야함
Error Propagation (에러 전파)
에러는 전파되는 특성이 있다.
예를들어 파이썬으로 여러 파일들을 만들고 여기서 한 파일에 버그가 발생했을때, 이 파일을 참조하는 것들은 다 이상한 행동이 발생할 수 밖에 없다. 즉, 그 에러를 참조한 다른 파일들 모듈들은 에러가 전파된다는 것이다.
소프트웨어 사이즈가 커지면 커질수록 에러 전파되는 특성이 있으므로, 최대한 빨리 수정되고 해결되어야 한다!