1. Playstation4의 운영체제 Orbis OS의 기반이 된 FreeBSD

FreeBSD

 FreeBSD는 유닉스 계열 운영체제이며 리눅스처럼 서버 용, 데스크탑 용으로 쓸 수 있는 범용적 인 운영체제이다. 먼저 BSD에 대해 알아보면 BSD는 Berkeley Software Distribution의 약어로, 캘 리포니아 대학교 버클리 캠퍼스에서 유래한 데서 붙여진 이름이다. 여럿 버클리 출신 프로그래머 들이 버클리에 있던 시절에 BSD를 위해 FreeBSD를 만들었다. BSD의 역사는 1977년 빌 조이가 유 닉스 V6에 일부 추가 기능을 더한 것을 Berkeley Software Distribution이라 배포한 것을 시작으로 하는데, FreeBSD는 4.4BSD 기반의 386BSD에서 출발했다. BSD는 혁신적인 기술들을 도입하는 것 으로 유명했는데, TCP/IP의 BSD 소켓이나 가상 메모리, NFS, ZFS 등이 이에 해당한다. 그러나 BSD 는 AT&T와의 라이선스 문제 등이 있어 4.4BSD-Lite를 끝으로 FreeBSD, NetBSD, OpenBSD 등으로 갈라지게 되었다. FreeBSD는 리눅스와 마찬가지로 AT&T의 공식 유닉스 인증을 받지는 않았으나 코드의 기원이 UNIX에서 시작되었기 때문에 Genetic UNIX로 분류된다.

 

 FreeBSD는 C와 어셈블리 언어로 개발되었다. 또한 소수지만 매우 활동적인 커뮤니티를 가지고 있어 질문에 대한 답변도 웬만한 인기 리눅스 배포판보다 훨씬 빠르게 달린다. FreeBSD는 BSD 라 이선스를 따르는데 이는 리눅스의 GPL 라이선스보다 “Free”라는 단어를 포괄적으로 해석하여 자 유 소프트웨어라면 사용하는 것 자체가 제약 없이 자유여야 한다는 모토이기 때문에, 소스를 가 져다가 마음대로 바꿔 소스 공개를 하지 않는 채 상업적으로 이용해도 아무런 제약이 없다.

 

이러한 FreeBSD를 커스터마이징 하여 만든 운영체제인 Orbis OS는 PlayStation 4에서 사용하는 운영체제이다. PlayStation 5에서는 개선된 버전인 Orbis 2.0을 사용했다. 추가적으로 PlayStation 3 에서는 FreeBSD 8.2 기반인 CellOS를 사용했다.

 

 

2. SteamOS

SteamOS
SteamOS

 SteamOS는 Linux 기반 운영 체제의 공개 릴리즈이다. Steam Machines 및 Steam Deck의 기본 운영 체제이다. SteamOS는 일부 비공개 소스 구성 요소가 포함된 오픈 소스이다. SteamOS는 주 로 TV에 직접 연결할 수 있는 일반 PC 하드웨어를 사용하여 콘솔과 같은 경험을 제공함으로써 PC에서 떨어져 비디오 게임을 플레이하도록 설계되었다. Linux용으로 개발되고 Steam 스토어에서 구입한 게임을 기본적으로 실행할 수 있다. SteamOS는 마우스나 키보드 없이 게임을 하기 위한 것이므로 웹 브라우징과 게임 플레이 외에는 내장된 기능이 없다. OS는 기본적으로 Nvidia, Intel 및 AMD 그래픽 프로세서를 지원한다.

 

 2013년 12월에 출시된 SteamOS 버전 1.0과 2.0은 GNU 데스크탑이 있는 Linux 의 Debian 배포 판을 기반으로 한다. Valve는 SteamOS를 통해 개발자가 Linux 게임 옵션을 더 잘 지원하기 위해 Linux 호환성을 릴리스에 통합하도록 권장했다.

 

 가장 최근 버전인 SteamOS 3(Steam Deck 하드웨어)이다. 2022년 3월, Linus Tech Tips는 세 가지 게임 벤치마크를 사용하여 Steam Deck에서 SteamOS 3의 성능을 Windows 10과 비교했다. Hitman 3은 Windows 10에서 평균 19fps, SteamOS 3에서 평균 34fps를 기록했다. Doom Eternel에서 SteamOS 3은 평균 60fps를 기록한 반면 Windows는 평균 47fps를 기록했다. Elden Ring은 Windows, SteamOS 3 각각 평균 30fps, 평균 37fps를 기록했다.

 

SteamOS가 당면한 문제

 SteamOS가 가진 문제점의 첫 번째는 낮은 호환성이다. 우선 SteamOS는 다양한 시스템에서 설 치되어 게임을 구동해야 하는 형태이다 보니 하드웨어 호환성이 다른 콘솔 게임기보다 중요하다. 하지만 리눅스를 기반으로 하기 때문에 기존 리눅스에서 생기는 호환성 문제는 여전히 산적해 있 으며, 특히 게임 성능에 절대적인 영향력을 가진 그래픽카드 중 상당한 점유율을 가진 Radeon 그래픽카드가 SteamOS에서 부팅이 되지 않거나 설치가 되더라도 Big Picture 인터페이스가 흐려 지는 문제 등, 제대로 동작하지 않는 사례가 많다. 또한, 상대적으로 지원이 원활하게 이루어지고 있는 지포스 그래픽카드 또한 SteamOS가 가진 호환성 문제에서 벗어나기 어렵다. G80 세대 이후, 즉 지포스 8000시리즈 이후 출시된 그래픽카드만 제대로 지원되는 문제는, 시기가 지난 부품을 게임용으로 재활용하고자 하는 이들이나 저렴한 시스템을 구축하고자 하는 이들에게 아쉬운 부분 이라고 생각된다.

 

 두 번째 문제는 바로 '언어'이다. SteamOS는 공식적으로 다국어를 지원하지만 현재 영어 이외의 언어는 설정을 하더라도 제대로 표시가 되지 않는다. 또한 이 언어 문제는 내장된 브라우저를 통 해 인터넷을 하게 될 때 확실하게 알 수 있으며, 별도의 언어 설정과 언어 파일을 설치하면 지원 은 되겠지만 SteamOS가 정식으로 지원할 때 까지는 영어만 지원한다고 볼 수 있다.

 

 SteamOS는 아직 걸음마 단계라고 볼 수 있지만 기대가 되는 것 같다. 그 이유는 게임을 위한 최초의 전문 OS라는 점과, 온라인 마켓 플레이스로 구매와 동시에 플레이가 가능한 점은 현재 게 임을 편리하게 할 수 있는 콘솔 게임과 다양한 활용이 가능한 PC의 장점을 절충했기 때문이다.

 

Selecting Right OS

 

1. Background for selecting OS

  • Market share(시장 점유율): PC/Desktop에서 윈도우의 점유율이 가장 높지만 점점 줄어들고 있는 추세이다. 슈퍼컴퓨터에서는 전부 Linux를 사용한다고 봐도 무방하다. 개발자들이 사용하는 OS의 비율은 아래 사진과 같다. 프로 개발자들 중 47퍼센트는 리눅스 운영체제를 사용한다. 스마트폰의 85퍼센트는 리눅스에 의해 작동된다. 90퍼센트 이상의 할리우드 특수 효과들은 리눅스를 사용해 만들어진다.

Market Share of Developers

  • Distributed, Multi & Parallel processing
  • Realtime processing: event가 발생했을 때 정해진 시간안에 처리하기
  • Extremely small hardware resource environment
  • Secure computing

 

2. Linux

  • 리눅스는 원래 가정용 PC로 개발된 진정한 32비트 UNIX와 유사한 OS이다. 하지만 지금은 다양한 플랫폼에서 실행된다.
  • 안정적이다. 응용 프로그램의 충돌이 Linux에서 OS를 중단시킬 가능성이 훨씬 적다.
  • Linux용 소스 코드는 누구나 무료로 사용할 수 있다.
  • 웹 서버나 FTP와 같은 서버를 실행하기에 이상적인 환경이다.
  • 쉽게 업그레이드를 할 수 있다.
  • 다중 프로세서를 지원한다.
  • 모든 풀 소스 코드는 제공되고 무료이다.

 

3. VxWorks

  • 실시간 운영체제이다.
  • Memory protection including real-time processes, error detection and reporting, and IPC
  • Symbolic debugging
  • Error handling framework
  • Native 64-bit operating system
  • Multitasking kernrel with preemptive and round-robin scheduling and fast interrupt response

 

 

본 글은 2학년 1학기 학부 강의 내용을 정리한 글입니다. 혹시라도 틀린 부분이 있다면 댓글로 편하게 알려주시면 감사하겠습니다.

'강의 정리 > 오픈소스sw개발방법및도구' 카테고리의 다른 글

Design(& Development) Process  (0) 2023.08.16
OS - FreeBSD, SteamOS  (0) 2023.08.14
Programming Language - Julia  (0) 2023.08.14
Selecting and Recommendation  (0) 2023.08.14
Problem Definition  (0) 2023.08.13

1. Define your problem (domain)

 1학년 2학기부터 머신 러닝과 딥 러닝에 관심이 생겼고 꾸준히 공부해오고 있다. 특히 이번 학 기에 기계학습 수업을 통해 인공지능에 관한 흥미와 지식은 늘어가고 있는 중이다. 또한 평소에 딥러닝을 이용해 개발된 ChatGPT, 딥드림과 같은 소프트웨어나 유명한 화풍을 학습해 다른 이미 지에도 적용시키는 style transfer와 같은 기법에 관심이 있어왔다. 따라서 인공지능 분야, 특히 AI 어플리케이션 분야에서 사용하는 언어는 어떤 것들이 있고 그 중 하나의 언어를 지정해 그 언어 의 장점과 단점은 무엇인지 등에 대해 조사해보았다.

 

2. Review widely used domain specific languages

 인공지능 분야에서 쓰이는 언어는 내가 생각했던 것보다 다양하다. 가장 대표적으로 쓰이는 언 어는 ‘python’이다. 그 외에 ‘C++, JVM언어군, JavaScript, swift, R, Julia’가 있다. JVM 언어군(자바, 스칼라, 코틀린, 클로저 등)은 자연어처리, 텐서 연산, GPU 가속 딥 러닝 스택 등 분야를 불문하고 파이프라인의 모든 부분에서 풍부한 라이브러리가 존재한다. JavaScript는 구글 TensofFlow.js가 계 속 개선되면서 케라스(Keras) 및 텐서플로우 모델을 브라우저에 배포하거나, GPU 가속 계산을 위 해 웹GL을 사용해서 Node.js를 통해 배포하여 쓰이게 되었다. Swift는 텐서플로우의 기능을 군더 더기 없이 완전한 형식으로 바인딩하고, 마치 파이썬을 사용하는 것처럼 파이썬 라이브러리를 가 져올 수 있는 기능을 제공한다. 줄리아(Julia)는 수치 계산에 초점을 둔 고성능 프로그래밍 언어다.

 

3. Select an appropriate language and study: Julia

 줄리아는 Matlab, R, Mathematic, Octobe와 같은 과학 컴퓨팅 언어를 사용하고 이러한 환경에 종사하는 사용자가 많이 사용하는 언어이다. 병렬 컴퓨팅을 지원할 뿐만 아니라 이것으로 작성한 코드의 실행 속도는 C보다는 약간 느리지만 Python이나 Matlab보다 훨씬 빠르다. 이런 점에서 줄리아가 AI 어플리케이션 개발 언어로 좋을 것 같다고 느꼈다. 아직까지는 Julia를 요구하는 회사 는 거의 없다. 하지만 미래에는 Julia가 더 발전되어 AI 어플리케이션 중요 개발 언어 중 하나로 자리잡을 것이라고 생각해 선택하고 조사하게 되었다.

 

- Language author

Jeff Bezanson, Stefan Karpinski, Viral B. Shah, Alan Edelman에 의해 개발되었다.

 

- When and Why author made the language

 줄리아는 4인으로 구성된 팀이 2009년에 개발해 2012년에 발표했다. 이들은 과학 계산과 데이터 처리에 사용되는 파이썬 등 기타 언어 와 어플리케이션의 단점을 해결하는 대안으 로 시작했다. 줄리아 개발팀은 “우리는 욕심이 많다.”며 다음과 같은 글들을 남기기도 했다. "우리는 오픈소스이면서 자유롭게 쓸 수 있는 언어를 원한다. C의 속도에 루비의 역동성을 원한다. 동형성(homoiconic)이 있으면서 리스프(Lisp) 같은 진정한 매크로를 지원하되 매트 랩(Matlab)과 같이 분명하고 익숙한 수학적 표기법이 있는 언어를 원한다. 파이썬만큼 일반 프로그래밍에 사용할 수 있고 R만큼 통계가 쉬우며 펄(Perl)만큼 문자열 처리가 자연스럽고, 매트랩만큼 선형대수가 강력하며 셸(shell)처럼 프로그램을 이어 붙이는 것에 능한 것을 원 한다. 배우기가 매우 간단하면서도 대부분의 전문 해커를 기쁘게 할 수 있는 것, 대화형이 기를 원하고 컴파일되기를 원한다. (C만큼 속도가 빨라야 한다고 말했던가?)" (블로그 링크: https://julialang.org/blog/2012/02/why-we-created-julia/) 다음과 같은 이유로 그들은 줄리아를 개발했다. 그들이 남긴 글을 보니 정말 욕심이 가득해 보였고 한편으로는 그만큼 줄리아를 열정적으로 개발했고 발전시키고 있음이 느껴졌다.

 

- Pros and Cons of the language

 장점은 첫째, 속도가 C와 포트란에 비견될 정도로 빠르다. 더 빠른 런타임 성능을 위해 LLVM 컴파일러 프레임워크를 사용해 JIT 컴파일 된다. 둘째, 매뉴얼이 깔끔하다. 이는 줄리 아 매뉴얼(https://docs.julialang.org/en/v1/)과 R 메뉴얼(https://www.r-project.org/otherdocs.html)을 비교해보면 확실하게 느낄 수 있다. 셋째, 모든 패키지가 GitHub로 관리된다. 줄리아의 패키지 저장소가 Github인 것이다. 줄리아 패키지 또한 깔끔하다. 넷째, 최신 언어 이기 때문에 모듈이 잘 정리되어 있고 현대적이고 함수형인 문법을 사용할 수 있으며 타임 시스템 또한 강력하다. 다섯째, 파이썬, C, 포트란 라이브러리 호출이 가능하다. 그 외에도 메타프로그래밍 지원, 디버거 보유, 탁월한 병렬 처리, 자동 메모리 관리 기능 등의 장점들 이 있다.

 단점은 Python이나 R 등과 비교했을 때 아직 사용자가 적어 패키지가 적다. 하지만 일반 개발목적의 경우가 아니라 자연과학에 관련된 분야로 한정 짓는 경우에는 많은 패키지가 잘 개발되어 있다고 한다. 이를 통해 자연과학과 관련된 분야인 경우에는 Julia를 주 개발 언어로 사용하여도 괜찮겠다는 생각을 했고, 추후에 줄리아를 사용해 자연과학과 관련해 연 구를 하거나 프로젝트를 해봐야겠다. 추가적으로 KAIST 인문사회과학 연구소에서 요구하는 언어 중 하나가 Julia인 것을 알 수 있다. 또한 사용자가 적다는 것은 대규모의 헌신적이고 활발한 커뮤니티가 없다는 것이다. 줄리아 커뮤니티는 열정적이고 커지고 있지만 아직 파이 썬 커뮤니티의 규모에 비하면 미미하다. 이는 시간이 지나면 해결될 사항이라고 생각하고 나 또한 Julia 언어를 사용함으로써 활발한 커뮤니티 형성에 기여할 수 있도록 노력할 것이다.

 

- Standard and/or Roadmap of the language

https://docs.julialang.org/en/v1/

줄리아의 standard는 상단 문서에 깔끔하게 정리되어 나와있다.

공식 사이트에 Roadmap은 나와있지 않지만 다음의 커뮤니티 대화 내용을 기반으로 로드맵 을 정리해 보았다.

 1. Julia 기본 문법 학습

  • 변수, 자료형, 연산자, 함수, 제어문 등의 기본적인 문법 학습
  • Julia의 특징과 장단점 이해

 2. Julia 패키지 및 라이브러리 학습

  • Julia 패키지 매니저(Pkg) 사용법 학습
  • Julia에서 제공하는 다양한 라이브러리와 패키지 학습
  • DataFrames.jl, Plots.jl, JuMP.jl, Flux.jl 등

 3. 과학 및 공학 계산에 대한 이해

  • Julia를 사용하여 수학, 통계, 공학 등의 계산을 해결할 수 있는 방법 학습
  • 행렬 연산, 선형 대수, 통계 분석 등

 4. 고급 주제 학습

  • 다중 스레드 및 병렬 처리, 코드 최적화, 패키지 개발 등 5. 프로젝트 구현 및 실전 응용
  • Julia를 사용하여 프로젝트를 구현해보고, 실제 문제를 해결하는 경험 쌓기

 

- Famous open source software using the language: SciML

(링크: https://docs.sciml.ai/Overview/stable/) SciML은 줄리아 프로그래밍 언어로 개발된 과학적 기계학습을 위한 오픈소스 소프트웨어이 다. Sci는 science를 의미하고, ML은 기계학습을 의미한다. 미분 방정식(이산 방정식, 상미분 방정식, 분할 및 분할 ODE, 확률 상미분 방정식, 임의 미분 방정식, 미분 대수 방정식 지연 미분 방정식, 혼합 이산 및 연속 방정식 등), 대규모 비선형 시스템, 자동화된 모델 검색을 위한 소프트웨어이다.

SciML의 목표: 강력한 교차 언어 과학 기계학습 소프트웨어 개발을 위한 허브가 되는 것이다.

그 외도 선형 및 비선형 최적화 문제를 모델링하고 해결하는 데 사용되는 패키지인 JuMP, R의 데이터프레임과 유사한 구조를 제공하는 데이터프레임 라이브러리인 DataFrames.jl, 딥 러닝 모델을 구축하고 학습시키는 데 사용되는 패키지인 Flux.jl, 다양한 유형의 상미분방정 식 문제를 해결하는 데 사용되는 패키지인 DifferentialEquations.jl, 베이지안 추론 및 확률적 모델링을 수행하는 데 사용하는 패키지인 Turing.jl, 웹 어플리케이션 개발을 위한 웹 프레임 패키지인 Genie.jl이 있다.

 

4. Review

 아까 말한대로 아직까지는 Julia를 요구하는 회사가 거의 없다. 하지만 미래에는 Julia가 더 발전 되고 많은 사람들이 사용해 커뮤니티가 활성화되면서 향후 데이터 과학 및 공학 분야에서 더욱 중요한 역할을 할 것이라고 생각한다. 아직 언어를 아주 깊게 공부하지 않은 나의 입장에서는 Julia의 깔끔하고 보기 좋게 매뉴얼을 구성한 점이 마음에 쏙 들었다. 당장은 Python을 이용해 기 계학습을 공부하겠지만, 이번 과제를 통해 파이썬 외에도 다양한 언어가 있음을 배웠고 특히 Julia가 앞으로 더 발전할 언어라고 느꼈으므로 필요에 따라 파이썬이 아닌 다른 ‘도구’인 Julia를 꼭 공부해볼 것이다.

'강의 정리 > 오픈소스sw개발방법및도구' 카테고리의 다른 글

OS - FreeBSD, SteamOS  (0) 2023.08.14
Selecting Right OS  (0) 2023.08.14
Selecting and Recommendation  (0) 2023.08.14
Problem Definition  (0) 2023.08.13
Introduction to Opensource and Linux  (0) 2023.08.13
Selecting and Recommendation

 

도메인, 특정 문제(Libraries, open source softwares, IDEs, development environments)에 맞는 프로그래밍 언어를 선택해야한다.

명확하게 문제를 정의하고 그에 맞는 프로그래밍 언어를 선택해야한다.

 

1. Hardware Specific Problem?

일반적으로 C, C++, Assembly 언어를 선택한다. 

아두이노 키트는 C를 요구한다.

리눅스유닉스 커널은 C/ C++을 지원하는 플랫폼을 요구한다.

MacOS 커널은 Objective-C/Swift를 요구한다.

C와 C++에서 하드웨어와 관련된 특징은?

  • 물리적 메모리 제어(Physical memory management): C와 C++에는 포인터가 있다. 하드웨어를 다룰 수 있다는 것은 그 언어가 직접 컴퓨터 메모리 값을 읽고 쓸 수 있다는 것이다. 이를 C와 C++이 가장 잘한다. (다른 언어들은 physical하지 않은 메모리를 다룬다.)
  • 비트 단위 연산(Bit operation)

 

2. Hardware Independent Problem?

웹 서버

  • JavaScript: 처음에는 웹 브라우저의 클라이언트 측만 구현됨. 지금은 웹 서버 및 데이터 베이스의 서버 측을 포함한 많은 유형의 호스트 소프트웨어에 JavaScript 엔진이 내장되어 있다.
  • Node.js
  • 전용 도구: Apache, Nginx, Wordpress

데이터 분석, 데이터 사이언스

유용한 정보를 발굴하고 결론을 제시하며 의사 결정을 지원하는 것을 목표로 데이터를 검사, 정리, 변환 및 모델링하는 과정이다.

주요한 요구사항으로는 자연어 처리, 언어의 이미 처리/ 선형 대수, 확률과 통계가 있는데 이에 가장 적합한 언어가 Python이다.

  • Python: 수학, 물리, 생명 관련 계산하기에 좋음. 문자열 처리(분석)에 강함.
  • R: 수학 계산에 좋음. 수학 공식을 풀기에는 좋으나 자연어 처리하기엔 그닥임.

클라우드 컴퓨팅

어딘가에 있는 CPU, GPU, 네트워크를 필요할 때 필요한 만큼 일정 비용을 지불하고 사용한다.

  • OpenStack(오픈소스, Linux Foundation): NASA에서 만들었고 Python을 사용했다. 데이터센터 전체에서 대규모 컴퓨팅, 스토리지 및 네트워킹 리소스 풀을 제어한다.

 

 

 

결론은 언어를 계속 필요에 따라 바꿀 수 있어야 한다는 것이다.

 

 

본 글은 2학년 1학기 학부 강의 내용을 정리한 글입니다. 혹시라도 틀린 부분이 있다면 댓글로 편하게 알려주시면 감사하겠습니다.

'강의 정리 > 오픈소스sw개발방법및도구' 카테고리의 다른 글

OS - FreeBSD, SteamOS  (0) 2023.08.14
Selecting Right OS  (0) 2023.08.14
Programming Language - Julia  (0) 2023.08.14
Problem Definition  (0) 2023.08.13
Introduction to Opensource and Linux  (0) 2023.08.13
Problem Definition

 

"문제 해결"의 측면이 아니라 소프트웨어를 개발함에 있어서 고려해야하는 "문제"를 다루는 측면이다.

즉, 소프트웨어의 특성을 충분히 고민하는 단계이다.

 

1. Software

System Software

  • 기본 시스템 리소스 및 프로세스를 관리하는 범용 소프트웨어
  • low-level assembly language나 machine code로 작성됨 => 언어의 폭이 좁음
  • 하드웨어와 밀접하게 상호작용함, 특정 하드웨어 요구 사항을 충족해야함
  • OS와 동시에 설치됨, 일반적으로 제조업체에서 설치함
  • 컴퓨터가 켜져있으면 계속 실행됨
  • 백그라운드에서 실행되고 사용자는 보통 접근할 수 없음
  • 독립적으로 실행됨
  • 시스템이 작동하는 데 필요함

Application Software

  • 사용자의 요구를 충족시키기 위해 특정 작업을 수행하는 소프트웨어
  • higher-level language로 작성됨(ex-Python, JavaScript)
  • 보통 하드웨어를 고려하지 않음, 하드웨어와 직접적으로 상호작용을 하지 않음
  • 사용자가 필요할 때 설치함
  • 사용자가 프로그램을 실행하고 끔
  • 포그라운드에서 실행되고 사용자는 특정 작업을 수행하기 위해 직접 접근함
  • 실행하기 위해 시스템 소프트웨어가 필요함

 

2. Purpose

순전히 나만을 위한 목적이거나 다른 사람의 요구에 의한 것이다.

    

3. Legacy

백지 상태에서 새로 짜거나 이미 존재하는 플랫폼을 기반으로 짠다.

  • Reverse Engineering (Reengineering): 연역적 추론을 통해 이전에 만든 소프트웨어가 어떻게 작업을 수행하는 지 이해하려고 하는 것이다. 요구사항을 분석하고 디자인, 코드 등을 분석하여 통찰력을 얻는다.
  • Software Reuse: Design Patterns, Program Libraries, Application Program Lines 등을 재사용한다.
  • Refactoring: 코드의 가독성을 높이기 위해, 복잡성을 줄이기 위해, 확장성과 성능을 향상시키기 위해, 프로그램 실행을 빠르게 촉진하기 위해 refactoring을 한다.

 

4. Project Characteristics

  • 기한: 언제까지 서비스를 출시해야 하는 지
  • 성능: 최소한 어느정도의 성능을 내야하는지(capacity, response time)
  • 리소스: 개발자의 수, 개발자 능력, 돈
  • 성능 지표(핵심 성능 지표 KPI): 성능 측정의 한 유형이다. KPI는 조직 또는 조직이 참여하는 특정 활동(프로젝트, 프로그램, 제품)의 결과를 평가한다. 전략 및 운영의 개선을 돕고, 의사 결정을 위한 분석을 만들고, 가장 중요한 것에 집중할 수 있도록 돕는다.

 

5. Hardware Dependency

하드웨어에 의존적임

일반적으로 하드웨어 구성요소에 의해 성능이 제한된다. 길이 딱 정해진 대신 최대한 낼 수 있는 성능이 제한되는 것이다.

ex) 아두이노(ATmega, C, Sketch IDE), 라즈베리파이(ARM Processor, GPIO, USB), 쿠다(NVIDIA GPU, C, C++, Fortran)

 

하드웨어로부터 독립적임

다양한 방식이 가능하다. 양과 질적 방법에 대한 고민을 해야한다.

어떤 것으로 할 지 고르기 위해 많은 것을 알아야 하고 일이 닥치기 전에 미리 고민해야 한다.

ex) 웹 서버 개발

- C++ & Proxygen: C++ 자체만으로는 웹 서버 개발이 힘들어 외부 라이브러리를 사용해야 한다.

- Python & Django: 언어 자체에 웹 서버의 핵심 기술인 HTTP가 있으며 비교적 쉽다.

- JavaScript & Node.js: 성능이 탁월하다.

- Apache/ Nginx

 

6. Mobile Application Development

Native Platform(IOS/ Android)

성능을 극대화할 수 있다. 두 개 이상의 플랫폼 지원이 힘들다. 해당 플랫폼에 완전 특화된 소프트웨어를 개발할 수 있다.

  • 아키텍처? 플랫폼 마다 앱을 따로 만듦
  • 성능? 최대로 낼 수 있음
  • 개발 시간? 길다
  • 비용? 비싸다
  • 타겟? 특정 플랫폼으로 한정됨
  • 유저 경험? 우수하다
  • 코드 재사용? 거의 없음
  • 하드웨어 접근성? 완전히 하드웨어 지원 가능

 

Cross Platform(HTML/ CSS/ JavaScript)

성능 제한이 있지만 한 번 만들어서 여러 플랫폼에 돌릴 수 있다는 것이 큰 장점이다.

  • 아키텍처? 하나의 앱으로 다양한 플랫폼에 가능
  • 성능? 성능 이슈가 있음
  • 개발 시간? 짧다
  • 비용? 싸다
  • 타겟? 한정되지 않음
  • 유저 경험? 모든 플랫폼에 대한 통합 UX로 떨어짐
  • 코드 재사용? 60% 가량 재사용
  • 하드웨어 접근성? 제한됨

Cross Platform이 점점 더 인기를 얻어가고 있는 추세다. 또한 Cross Platform의 성능이 Native에 비해 밀리지 않는다.

 

본 글은 2학년 1학기 학부 강의 내용을 정리한 글입니다. 혹시라도 틀린 부분이 있다면 댓글로 편하게 알려주시면 감사하겠습니다.

'강의 정리 > 오픈소스sw개발방법및도구' 카테고리의 다른 글

OS - FreeBSD, SteamOS  (0) 2023.08.14
Selecting Right OS  (0) 2023.08.14
Programming Language - Julia  (0) 2023.08.14
Selecting and Recommendation  (0) 2023.08.14
Introduction to Opensource and Linux  (0) 2023.08.13

 

Introduction to Opensource and Linux

목표

 오픈소스, 최신 소프트웨어 절차, 철학 및 도구를 이해하고 스스로 리눅스를 경험하는 것이다.

 

오픈소스 소프트웨어란?

 소스코드를 공개해 누구나 특별한 제한 없이 그 코드를 보고 사용할 수 있는 오픈 소스 라이센스를 만족하는 소프트웨어이다.

소프트웨어의 소스 코드를 자유롭게 읽고 재배포 및 개조를 가능하게 하여 버그 개선이 빠른 장점이 있다.

 

자유(Freedom) 소프트웨어란?

 복사와 사용, 연구, 수정, 배포 등의 제한이 없는 소프트웨어이다. 컴퓨터 사용자들의 자유로운 사용을 강조한다.

자유 소프트웨어는 가격이 아니라 자유의 문제이다. 이 개념을 이해하기 위해서는 'Free'를 '무료 맥주'가 아니라 '언론의 자유'로 생각해야 한다.

보다 정확하게는 자유 소프트웨어는 프로그램 사용자가 네가지 필수 자유를 갖는 것을 의미한다.

1. 어떤 목적으로든 원하는 대로 프로그램을 실행할 수 있는 자유 (Freedom Level 0)

2. 프로그램 작동 방식을 연구하고 원하는 대로 컴퓨팅을 수행하도록 변경할 수 있는 자유 (Freedom Level 1)

3. 다른 사람에게 도움이 되도록 사본을 재배포할 수 있는 자유 (Freedom Level 2)

4. 수정된 버전의 사본을 다른 사람들에게 배포할 수 있는 자유 (Freedom Level 3)

 

Free Software Foundation이란?

 자유 소프트웨어 재단은 1985년 10월에 Richard Stallman이설립한 비영리 단체로 조직의 자유 소프트웨어 운동을 지원한다. GNU General Public License와 같은 copyleft를 지향한다.

창립부터 1990년대 중반까지 FSF의 자금은 대부분 소프트웨어 개발자를 고용하여 GNU Project를 위한 자유 소프트웨어를 작성하는 데 사용되었다. 1990년대 중반부터 FSF의 직원들과 자원자들은 자유 소프트웨어 운동과 자유 소프트웨어 커뮤니티를 위해 주로 법적 및 구조적 문제에 대해 일했다.

FSF는 자체 컴퓨터에서 자유소프트웨어만 사용하는 것을 목표로 한다.

 

GNU OS란?

 운영체제이자 컴퓨터 소프트웨어 모음집이다. 이때의 소프트웨어들은 온전히 자유 소프트웨어로 이루어져 있다. 대부분이 GNU 프로젝트의 GPL 라이센스를 가진다.

Unix 계열이지만 자유 소프트웨어이고 Unix 코드를 포함하지 않았다.

 

Richard Stallman은 누구?

- 직업: Activist(활동가) & Programmer

- Known for Free software movement, GNU, GNU Emacs, GNU Compiler Collection, GNU GPL, Copyleft, Free Software Foundation

 

OpenSource Example

<Hardware>

Arduino

 아두이노 하드웨어 제품은 CC BY-SA 라이센스에 따라 라이센스가 부여되는 반면, 소프트웨어는 GNU LGPL, GPL에 따라 라이센스가 부여되며 누구에게나 아두이노 보드 제조 및 소프트웨어 배포가 허용된다.

<Processor>

 RISC-V & Linux

<Datacenter>

 OCP(Open Compute Project)

Facebook에 의해 시작되었다.

 

Why Linux?

[리눅스가 쓰이는 분야]

1. Smartphones and IOT: 안드로이드는 Linux 운영체제를 가지고 customization한 것이다.

2. Physical Computing: 라즈베리파이는 리눅스 OS를 사용한다. 영국에서 개발되었고 저가이다. 

3. Super Computers: 슈퍼 컴퓨터는 거의 모두 OS로 Linux를 사용한다.

4. Linux over Window Desktop: 윈도우 위에서 가상화 작업을 통해 Linux 운영체제인 우분투가 돌아갈 수 있게 되었다.

5. Robot: ROS라는 운영체제는 Linux 운영체제로 만들어졌다.

6. Automative Grade Vehicle(자동차)

7. Classic Game Platform: Playstation, 콘솔형 게임들에 Linux가 쓰였다.

8. Online Game Platform: SteamOS + Linux => Linux에서 Steam을 사용할 수 있다.

9. Data Science: 대규모 분석을 해야할 때 Linux Server를 사용한다.

 

Linux Foundation이란?

 2000년부터 Linux Foundation은 기술 개발 및 상업적 채택을 가속화하기 위해 오픈소스 프로젝트를 중심으로 지속 가능한 생태계를 구축하는 데 전념하고 있다.

가장 큰 오픈소스 비영리 조직이다.

리눅스 외에도 많은 오픈소스 소프트웨어에 참여하고 있다.

 

본 글은 2학년 1학기 학부 강의 내용을 정리한 글입니다. 혹시라도 틀린 부분이 있다면 댓글로 편하게 알려주시면 감사하겠습니다.

'강의 정리 > 오픈소스sw개발방법및도구' 카테고리의 다른 글

OS - FreeBSD, SteamOS  (0) 2023.08.14
Selecting Right OS  (0) 2023.08.14
Programming Language - Julia  (0) 2023.08.14
Selecting and Recommendation  (0) 2023.08.14
Problem Definition  (0) 2023.08.13

+ Recent posts