2024. 6. 25. 16:35ㆍ오픈소스SW
Software
Application softwares - 컴퓨터에 사용하는 목적에 따라 제작된 기능적 프로그램 (Word processor, Web browser, media players, etc.)
System softwares - 사용자가 컴퓨터 하드웨어 및 각종 장치 정보를 효율적으로 사용할 수 있도록 지원하는 소프트웨어 (Linux, Mac, Windows, Android, etc.)
Other types of softwares - Programming tools(visual studio, Xcode, WinDev...) , middlewares (application server, API.....) , drivers, etc.
----------------------------------------------------------------------------------------------------------------
Open Source Software (OSS)
오픈소스 소프트웨어의 개념은 컴퓨터 시대의 시작부터 존재했다. 오픈소스란 공개적으로 액세스할 수 있게 설계되어 누구나 자유롭게 확인, 수정, 배포할 수 있는 코드이며, Open과 Free의 두 가지 성격이 있다.
Open - Open은 소프트웨어의 소스 코드가 공개되어 누구나 접근하고, 볼 수 있으며, 수정하고, 배포할 수 있는 상태를 의미한다. 즉, 소프트웨어의 내부 구조와 작동 방식을 모두가 투명하게 알 수 있도록 공개되어 있다는 뜻이다.
Free - Free는 두 가지 의미를 지닌다.
(1) 자유 (Free as in Free Speech, Freecom to distribute) - 소프트웨어를 사용하는 사람에게 배포, 수정, 사용 등의 자유를 준다는 의미이다. 이 경우, Free는 자유로운 표현이나 활동을 보장하는 의미로 사용된다. 예를 들어, 사용자가 소프트웨어를 자유롭게 배포하거나 수정할 수 있는 권리가 있다는 뜻이다.
(2) 비용 없음 (Free as in no cost) - 소프트웨어가 무료로 제공된다는 의미이다. 즉 사용자가 소프트웨어를 사용하는 데 비용이 들지 않았다는 뜻이다. 이 경우, Free는 경제적인 비용이 없다는 의미로 사용된다.
Free라는 단어가 앞서 설명한 두 가지 의미를 동시에 가질 수 있기 때문에 혼동을 피하기 위해 Open이라는 용어가 사용된다. Open이라는 용어는 소프트웨어의 소스 코드가 공개되어 있다는 점을 명확히 하여, 자유와 비용 모두를 포함하는 Free의 모호성을 해결해 준다.
----------------------------------------------------------------------------------------------------------------
OSS: definition
소스 코드는 공개되거나 라이센스와 함께 제공된다.
License :
(1) 소스 코드를 examine(검토) , modify(수정), redistribute(재배포)할 수 있는 권리를 제공한다.
(2) 사용자의 신원이나 목적에 대한 제한 없이 제공된다.
Two classes of licenses:
(1) Permissive - 소프트웨어 사용에 대한 제약이 거의 없거나 매우 적은 라이센스이다. 이러한 라이센스는 사용자가 소스 코드를 자유롭게 사용할 수 있도록 허용하며, 몇 가지 기본적인 조건만 충족하면 소프트웨어를 수정, 재배포 및 상업적 목적으로 사용할 수 있다. (BSD , MIT , Apache)
(2) Restrictive - 소프트웨어 사용에 더 많은 제약을 두는 라이센스이다. 이러한 라이센스는 소프트웨어의 자유로운 사용과 수정, 재배포를 허용하되, 특정 조건을 반드시 준수하도록 요구한다. 제한적인 라이센스는 사용자에게 소프트웨어의 자유로운 사용을 허용하면서도, 원작자의 권리와 오픈 소스 소프트웨어의 철학을 보호하기 위한 규정을 포함한다.
(GPL , AGPL , LGPL)
GPL - 가장 널리 알려진 Restrictive 라이센스, 수정된 소프트웨어를 배포할 때 반드시 소스 코드를 공개하고, 동일한 GPL 라이센스를 적용해야함
----------------------------------------------------------------------------------------------------------------
Proprietary ( cloased source) Software (CSS)
소스코드가 공개되지 않은 소프트웨어를 의미한다. 이러한 소프트웨어는 일반적으로 소프트웨어의 소유자가 소스 코드를 비공개로 유지하며, 사용자에게 소프트웨어를 사용하는 데 필요한 라이센스만 제공한다. CSS는 상업적으로 배포되는 경우가 많으며, 소프트웨어의 사용, 수정, 재배포에 대한 권한이 제한적이다.
CSS의 주요 특징
● 소스 코드 비공개
● 소유자가 무조건 코드 작성자는 아님
● 최종 사용자는 소프트웨어를 사용할 때 특정 조건을 준수해야 하는 라이센스 계약에 동의해야 함
● 제한된 재배포 권한
The difference with OSS and CSS
● has nothing to do with price (가격과는 관련 x , OSS가 항상 무료인 것은 아니고, CSS도 항상 유료인 것이 아니기 때문)
● Rather, the rightes of redistribution, modification, reuse of code
----------------------------------------------------------------------------------------------------------------
OSS development map
Maintainer / Creator - 소프트웨어의 초기 버전을 만들거나 유지보수하는 사람이나 팀을 가리킨다. 이들은 소프트웨어의 주요 버전을 관리하고 배포한다.
Contributor - 소프트웨어 개발에 기여하는 사람들을 의미한다. 이들은 주로 코드를 수정하거나 새로운 기능을 추가하여 프로젝트를 발전시킨다.
Branch / Patch - 기여자가 만든 코드 수정 사항 또는 추가 기능이다.
Upstream - Contributor가 수정한 코드가 원본 소프트웨어의 최신 버전과 동기화되도록 하는 과정이다. 이는 수정한 코드를 원본 소프트웨어 개발자에게 반영 요청하는 것을 의미한다.
Fork - 원본 소프트웨어 개발자가 Contributor의 수정 사항을 수락하지 않을 경우, Contributor는 자체적으로 수정된 버전을 유지하고 개발할 수 있는 별도의 프로젝트를 시작한다. 이를 포크라고 한다.
----------------------------------------------------------------------------------------------------------------
OSS governance models
Company-led - 특정 기업이나 조직이 주도하여 소프트웨어 프로젝트를 관리하고 개발하는 구조. 주로 기업의 비즈니스 목표와 이해 관계자들의 요구를 충족시키기 위해 설계되며, 개방된 프로세스보다는 비교적 폐쇄적이고 제한된 접근을 가질 수 있다.
ex) Android - 구글이 주도하는 안드로이드는 회사 중심의 지배 구조를 가지고있다. 안드로이드의 개발과 관리는 구글의 지시와 통제 아래 이루어지며, 다른 기업들도 기여하지만 중앙 집중적인 통제가 있다.
Benevolent Dictatorship - 한 개인이 프로젝트의 주요 결정을 주도하는 구조. 이 개인은 프로젝트의 기술적 방향과 전반적인 운영에 큰 영향을 미친다.
ex) Linux kernel - 리누스 토르발스가 리눅스 커널 프로젝트에서 자비 지도자 역할을 하고 있다. 그는 커널의 코드를 최종적으로 결정하고 코드 기여를 검토하며, 커뮤니티와 협력하여 전략적 방향을 결정한다.
Governing Board - 보다 작고 더 조직적인 그룹이 프로젝트를 관리하고 지원하는 구조. 이러한 구조는 다양한 이해 관계자들의 의견을 반영하며, 프로젝트의 전략적 방향과 중요한 결정을 지원한다.
ex) Debian - Debian 프로젝트는 지도자 집행 부를 통해 관리된다. 이 집행 부는 개발자와 커뮤니티 멤버들로 구성되어 있으며, 다양한 관리적, 기술적인 문제에 대해 토론하고 결정을 내리는 역할을 한다.
----------------------------------------------------------------------------------------------------------------
Version Control System (VCS)
VCS는 파일 또는 파일 세트의 변경 사항을 시간에 따라 기록하는 도구로, 다음과 같은 기능을 제공한다.
● 파일의 변경 내역 기록 - 파일이나 파일 그룹의 변경 사항을 연대순으로 기록한다.
● 이전 상태로 되돌리기 - 과거의 특정 시점으로 파일을 되돌릴 수 있는 기능을 제공한다.
● 시간에 따른 변경 비교 - 각 버전 사이의 차이점을 비교하여 변경 사항을 시각적으로 확인할 수 있다.
● 누가 어떤 내용을 수정했는지 확인 - 각 변경 사항을 도입한 개발자와 변경된 내용을 확인할 수 있다.
● 문제 도입자와 도입 시기 추적 - 특정 문제가 도입된 시점과 그 원인을 파악할 수 있다.
----------------------------------------------------------------------------------------------------------------
Local VCS
파일의 버전을 로컬 컴퓨터에서 관리하는 간단한 형태의 버전 관리 시스템이다.
● 단일 사용자 지향 - 파일의 변경 이력을 개인의 로컬 컴퓨터에 저장하고 관리한다.
● 설치와 관리의 간편함 - 중앙 서버나 복잡한 설정이 필요하지 않아 설치와 관리가 간편하다
● 속도와 성능 - 로컬 파일 시스템에 직접 접근하기 때문에 속도가 빠르고 성능이 우수하다
● 네트워크 의존성 X - 파일의 버전 이력을 로컬에 저장하기 때문에 네트워크 연결이 필요하지 않는다.
● 단점 - 협업이나 여러 사용자가 함께 작업할 경우 파일을 공유하거나 버전을 동기화하기 어려우며, 파일을 잃어버린 경우 복구가 어려울 수 있다.
----------------------------------------------------------------------------------------------------------------
Centralized VCS
여러 사용자가 함께 작업하는 프로젝트에서 파일의 버전을 중앙 서버에서 관리하는 방식.
● 협업 용이성 - 다수의 개발자가 프로젝트를 함께 관리하고 협업할 수 있다.
● 관리 용이성 - 중앙 집중적인 관리를 통해 보안과 접근 제어를 쉽게 설정할 수 있다.
● 네트워크 의존성 - 중앙 서버와의 네트워크 연결이 끊어지면 작업이 불가능 할 수 있다.
● 속도 - 파일 버전 관리 시스템에 대한 의존성으로 인해 작업 속도가 느릴 수 있다.
----------------------------------------------------------------------------------------------------------------
Distributed VCS
파일의 버전을 개별 개발자들이 각자의 로컬 저장소에 저장하고 관리하는 시스템.
● 분산 개발 - 각 개발자가 독립적으로 작업하고 변경 사항을 관리할 수 있다.
● 안정성과 복원성 - 각 로컬 저장소는 완전한 이력을 가지고 있어 데이터 복원과 복구가 용이하다.
● 협업 용이성 - 분산된 개발 흐름을 지원하여 다수의 개발자가 자유롭게 협업할 수 있다.
● 복잡성 - 초기 설정과 학습 곡선이 높을 수 있다.
● 보안과 접근 제어 - 중앙 집중식 시스템보다 복잡한 접근 제어와 보안 설정이 필요할 수 있다.
----------------------------------------------------------------------------------------------------------------
Three States of Files in Git
● Modified - 파일을 변경했지만 아직 그 변경 사항을 로컬 데이터베이스에 커밋하지 않은 상태.
● Staged - 수정된 파일을 현재 상태로 스테이징 영역에 추가한 상태. 이 과정을 통해 Git은 커밋할 변경 사항들을 준비하게 된다.
● Committed - 변경 사항이 로컬 데이터베이스에 안전하게 저장된 상태. 스테이징된 파일들이 실제로 로컬 저장소에 영구적으로 기록된 상태이다.
'오픈소스SW' 카테고리의 다른 글
Git-Branching(3) (3) | 2024.06.30 |
---|---|
Git-Branching(2) (0) | 2024.06.30 |
Git-Branching (1) (0) | 2024.06.30 |
Git Basics(2) (0) | 2024.06.26 |
Git Basics(1) (1) | 2024.06.26 |