소프트웨어 저작권 소유자가 모든 사람에게 소스 코드를 게시, 사용, 복사, 수정 및 배포할 권리를 부여한 소프트웨어
오픈소스 소프트웨어의 사용, 복제, 수정, 배포 권한 범위 지정
-
상용화 관점
Commercial SW (E.g. Windows)- 개별 이용 허락
- 로열티 지급
- 실행 바이너리만 제공
- 복제, 배포, 수정 불가
- 사용기간과 목적 제한
Open Source SW
- 일괄 사전 이용허락
- 로열티 없음
- 소스코드 제공
- 복제, 배포, 수정 허용
- 기간/목적 제한 없음
-
철학적 관점 Free Software VS OSS
-
Richard Stallman (Free Software)
- Creater of GNU project
- FSF(Free SOftware FOundation 1984~)
- copyleft(no SW patent, NO DRM)
-
Eric S. Raymond (OSS)
- OSI(Open Source Initiative 1998~)
- Ambiguity of free
- Combination of OSS and Closed Source SW(오픈소스와 상용 소프트웨어 인정 및 결합)
- License under Law
-
Linking with Propertary SW(상용 소프트웨어와의 연동)
- GPL 2.0: No → GPL은 강력한 copyleft라서 GPL 코드와 연결(link)된 소프트웨어는 전체가 GPL을 따라야 함.
- LGPL: Yes → 라이브러리 수준에서 링크는 허용되며, 수정한 부분만 공개하면 됨.
- MIT / BSD: Yes → 매우 자유로움
- Apache 2.0 / MPL: Yes → 둘 다 linking은 허용.
Must Publish Modification(수정 시 공개 의무)
- GPL 2.0: Yes → 수정본을 배포할 때 반드시 소스코드를공개.
- LGPL: Yes → 라이브러리수정 시 공개 의무가 있음.
- MIT / BSD: No → 자유롭게 수정 가능하나, 소스코드 공개 의무 없음.
- Apache 2.0: Yes → 수정한 파일에는 고지(Notice)를 남겨야 함. GPL처럼 전체 소스를 공개할 필요는 없음.
- MPL 1.0/1.1: Yes → 수정한 파일 단위로 공개해야 함 (file-level copyleft).
Patent Protection(특허 보호 조항)
- GPL 2.0: No → 특허에 대한 명시적 보호 조항 없음.
- LGPL: No → 특허에 대한 명시적 보호 조항 없음.
- MIT / BSD: No → 특허에 대한 명시적 보호 조항 없음.
- Apache 2.0: Yes → 특허 라이선스(사용자에 대한 특허권 허여 조항)가 포함됨.
- MPL 1.0/1.1: Yes → 특허 조항이 포함됨.
시간 흐름에 따른 변화를 추적하여 언제든지 이전 작업 버전으로 쉽게 돌아가도록 돕는 시스템
VCS가 없다면?
- Make a single backup copy
- Add a version number, date
- Use a shared folder so other people edit together
- CVS(Cocurrent Version System) - 최초의 VCS
- SVN(Subversion) - 두 번째
- Mercurial
- Dracs
- Git
Repository(Repo) - 버전 정보가 모두 저장되는 저장소
-
Checkin - 파일의 변경 사항을 저장소에 기록
-
Checkout - 저장소에 있는 파일의 특정 버전을 작업 공간으로 가져옴
-
Diffs - 버전 간의 차이점 확인
-
Branching - 버전 관리를 여러 분야로 나눔, 코드를 분리하여 독립적인 개발 공간을 만듦
-
Merging - 분리된 Branch의 변경 사항을 다른 Branch와 합침
-
Conflicts - 동일 코드를 여러 사람이 수정 후 각자의 변경 사항을 저장하려 할 때 발생, 자동으로 해결되지 않음
- Re-apply - 자신의 변경 사항 재적용 (E.g. Joe의 변경 사항 + Sue의 변경사항)
- Override - 자신의 변경 사항을 덮어씌움(권장하지 않음)
-
Tagging - 특정 버전에 tag(label) 지정
-
Centralized VCS (E.g. CVS, SVN)
- 중앙 서버 존재
- 하나의 저장소만 존재, 모든 사용자가 여기에 연결
-
Decentralized VCS(E.g. GIT, Mercurial, Dracs)
- 모든 사용자가 개인의 저장소를 가짐
- 별도의 원격 저장소와 동기화
- 원격 저장소와 함께 새로운 협업 방식 사용 - fork, pull request
Linus Torvalds가 리눅스 커널 개발 협업을 위해 개발
- Workplace - 사용자가 파일을 수정하는 공간
- Index(Stage) - 다음 커밋에 포함될 파일을 준비하는 공간
- Local Repository - 로컬 컴퓨터에 커밋된 파일의 이력 저장
- Remote Repository - 다른 사용자와 공유하기 위해 원격 서버에 존재하는 저장소
- git clone
원격 저장소(Remote Repository)의 전체 이력과 파일을 로컬 컴퓨터로 복제, 명령어는 로컬 저장소와 작업 공간(Workspace) 을 동시에 생성, 최초 1회 내려받을 때 적합
- git add
작업공간에서 수정한 파일을 인덱스에 올려 다음 커밋에 포함될 준비
- git commit
인덱스에 있는 변경사항을 로컬 저장소에 영구적으로 기록, 저장 시 메시지를 남겨 변경 내용 설명
- git commit -a
add 생략, 모든 변경 사항을 add + commit
- git push
로컬 저장소의 커밋 이력을 자신이 업로드 권한을 가진 원격 저장소에 업로드하여 다른 사람과 공유
-
git fetch
동료가 작업한 내용을 내려받음, 반복해서 내려받을 때 적합, 내 로컬 저장소가 아닌 별도의 공간(부 로컬 저장소)에 저장
-
git merge
부 로컬 저장소 + 내 로컬 저장소, 내가 작업한 내용과 fetch한 작업 내용이 합쳐짐, 한 파일은 한 사람만이 소유권을 가짐, 자동으로 실행되지 않음
- git pull
fetch + merge 원격 저장소의 최신 이력을 즉시 로컬 브랜치에 통합, 권장하지 않음
- git diff
현재 작업 공간의 파일과 인덱스, 또는 특정 커밋과의 차이점을 보여줌
- git diff HEAD
현재 작업 공간의 파일과 가장 최근 커밋간의 차이점을 보여줌
- fork
다른 사람의 원격 저장소 전체를 복사하여 자신 아래 새로운 원격 저장소를 만듦
- pull request
fork한 저장소에서 수정한 내용을 원래의 원격 저장소에 병합해달라고 요청함
fork와 pull request는 GIT 내부 기능, 명령어가 아님
일반 텍스트 편집기로 형식이 지정된 텍스트를 만들기 위한 경량 마크업 언어
John Gruber, Aaron Swartz가 개발 (2004)
GITHUB의 REAEME 파일 작성 등 널리 사용됨
-
볼드, 이텔릭
-
볼드체
글자 바깥에 ** 사용
**볼드체**-> 볼드체 -
이텔릭
글자 바깥에 _ 사용
_이텔릭_-> 이텔릭 -
함께 사용 가능
_**함께 사용**_-> 함께 사용
-
-
헤더
#개수로 글자 크기 조정 -
링크
-
인라인 링크
링크할 텍스트를 []로 감싼 뒤, 링크 주소를 ()로 표시
[Markdown](https://www.markdowntutorial.com/)-> Markdown -
참조 링크
[깃허브][github] [구글][google] [GITHUB][github] [github]: www.github.com [google]: www.google.com
-
이미지
-
인라인 이미지
로 사용, 링크와 동일하나 앞에 느낌표 추가->- 참조 이미지
![Black cat][Black] ![Orange cat][Orange] [Black]: https://upload.wikimedia.org/wikipedia/commons/a/a3/81_INF_DIV_SSI.jpg [Orange]: https://upload.wikimedia.org/wikipedia/commons/5/56/Tiger.50.jpg``` ->
-
-
인용문
문장 앞에 > 기호로 표시
> 인용문->인용문
-
리스트
-
unordered list
각 항목 앞에 *로 표시
* 우유 * 계란 * 연어 * 버터 -
우유
-
계란
-
연어
-
버터
-
ordered list
*표 대신 숫자로 표시
1. 보울 위에 계란 세 개를 깨뜨린다 2. 우유 3.7L를 보울에 붓는다 3. 버터를 힘차게 연어에 문지른다 4. 연어를 우유,계란을 쏟은 보울에 넣는다 -
-
보울 위에 계란 세 개를 깨뜨린다
-
우유 3.7L를 보울에 붓는다
-
버터를 힘차게 연어에 문지른다
-
연어를 우유,계란을 쏟은 보울에 넣는다
-
중첩 리스트
앞 항목보다 한 칸 더 들여쓰기로 중첩 리스트 사용 가능
* 틴틴 * 기자 * 얼간이 같은 주황색 머리 * 세상에서 제일 멋진 개와 친구들 * 햅덕 * 선장 * 멋진 턱수염 * 위스키 좋아함 * 아마 스카치도?
-
-
틴틴
- 기자
- 얼간이 같은 주황색 머리
- 세상에서 제일 멋진 개와 친구들
-
햅덕
- 선장
- 멋진 턱수염
- 위스키 좋아함
- 아마 스카치도?
-
한 줄을 건너띄고 다음줄을 들여쓰기하여 단락으로 만들 수 있음
1. 보울에 계란 3개를 깨뜨린다. 여러분은 흘리지 않고 계란을 깨뜨리고 싶을거에요. 만약 여러분이 좀 흘렸으면, 휴지를 사용해 닦아주세요!
-
보울에 계란 3개를 깨뜨린다.
여러분은 흘리지 않고 계란을 깨뜨리고 싶을거에요.
만약 여러분이 좀 흘렸으면, 휴지를 사용해 닦아주세요!
-
단락
Markdown에서는 단순 줄 변경(Enter 키)으로 줄을 구분할 수 없음
줄 나누기를 위해서는 문장 뒤에 공백 두 번(Space Bar 두 번)으로 줄 바꿈을 할 수 있음
줄바꿈을 하지 않았을 때
나는 나 자신과 모순되는가? 그렇다면 아주 잘되었다… 나는 나 자신과 모순이다, (나는 크다… 나는 다량의 것을 품고 있다.)
줄바꿈을 했을 때
나는 나 자신과 모순되는가?
그렇다면 아주 잘되었다…
나는 나 자신과 모순이다,
(나는 크다… 나는 다량의 것을 품고 있다.)

