Filesystem in Userspace와 AppImage

Filesystem in Userspace(FUSE)는 커널이 아닌 사용자 공간에서 파일 시스템을 구현할 수 있게 해주는 소프트웨어입니다. FUSE는 Linux 커널 모듈과 사용자 공간 라이브러리로 구성되어 있으며, 이를 통해 사용자는 자신만의 파일 시스템을 쉽게 만들 수 있습니다.

FUSE의 주요 특징은 다음과 같습니다.

  1. 사용자 공간에서 실행: FUSE는 파일 시스템 코드를 사용자 공간에서 실행할 수 있도록 해줍니다. 이는 파일 시스템 개발을 더 쉽게 하고, 커널 크래시 없이 개발 중인 파일 시스템을 테스트할 수 있게 합니다.
  2. 다양한 언어 지원: FUSE는 C, C++, Python, Java 등을 포함한 다양한 프로그래밍 언어를 지원합니다. 이는 개발자가 익숙한 언어를 사용하여 파일 시스템을 구현할 수 있게 합니다.
  3. 유연성: FUSE를 사용하면 다양한 종류의 파일 시스템을 쉽게 구현할 수 있습니다. 예를 들어, 원격 서버의 파일 시스템을 로컬에 마운트하거나, 데이터베이스를 파일 시스템으로 사용하는 등의 작업이 가능합니다.
  4. 보안: FUSE는 사용자 공간에서 실행되므로, 커널 공간에서 실행되는 전통적인 파일 시스템에 비해 보안상의 이점을 가질 수 있습니다. 이는 버그나 악성 코드로부터 시스템을 보호하는 데 도움이 됩니다.

FUSE의 동작 방식은 다음과 같습니다.

  1. 커널 모듈: FUSE는 먼저 커널 모듈을 통해 파일 시스템 호출을 인터셉트합니다.
  2. 사용자 공간 라이브러리: 인터셉트된 호출은 사용자 공간으로 전달되며, FUSE 라이브러리가 이를 처리합니다.
  3. 파일 시스템 구현: 사용자는 FUSE 라이브러리를 사용하여 파일 시스템의 동작을 정의합니다. 이는 파일 읽기, 쓰기, 삭제 등의 작업을 포함합니다.

FUSE는 특히 개발자들이 새로운 파일 시스템을 빠르고 쉽게 개발할 수 있도록 도와주는 강력한 도구입니다. 이를 통해 다양한 파일 시스템 실험과 구현이 가능해지며, 이는 Linux의 파일 시스템 확장성과 유연성을 더욱 강화합니다.

이렇게 좀 사전적인 의미로 FUSE를 설명해 드렸습니다. 근데 왜 이걸 이렇게 설명하냐면…. AppImage라는 형태의 프로그램들을 설명하기 위해서 그렇습니다.

요즘 제가 몇몇 프로그램을 받아서 리눅스에서도 써보고 있는데, AppImage라는 녀석으로 받을 경우에 어떻게 실행하라고는 쉽게 나와있습니다. Property에서 보면 이걸 프로그램으로 인식해서 실행하라고 체크박스가 있는데, 그걸 체크하여 설정한 후에 그냥 더블클릭하면 실행할 수 있습니다만, 이걸 왜 이렇게 해야 하는지에 대한 설명이 모자라더군요. 그 기반이 되는 녀석이 바로 FUSE입니다. 그리고 이녀석이 AppImage와 어떻게 연관되어있는지도 설명을 좀 사전적으로 해보겠습니다.

FUSE(Filesystem in Userspace)와 AppImage는 서로 다른 목적을 가진 두 가지 기술이지만, FUSE가 AppImage의 작동에 중요한 역할을 합니다. 이 두 가지가 어떻게 연결되는지 설명드리겠습니다.

AppImage

AppImage는 Linux 시스템에서 소프트웨어를 배포하는 포맷입니다. 이를 통해 하나의 실행 파일로 소프트웨어를 배포하고 실행할 수 있습니다. AppImage는 소프트웨어 설치를 필요로 하지 않으며, 단일 파일로 제공되어 사용자가 클릭하여 실행할 수 있습니다. 이는 특히 소프트웨어 배포를 간단하게 하고, 다양한 Linux 배포판에서의 호환성을 보장합니다.

FUSE와 AppImage의 연결

AppImage는 FUSE를 사용하여 파일 시스템을 마운트하고, 이를 통해 소프트웨어를 실행할 수 있습니다. 구체적으로, AppImage는 내부적으로 압축된 파일 시스템을 포함하고 있으며, 이를 FUSE를 통해 임시 마운트하여 소프트웨어를 실행합니다. 다음은 그 과정에 대한 자세한 설명입니다:

  1. AppImage 실행: 사용자가 AppImage 파일을 실행하면, 이 파일은 자체적으로 포함된 파일 시스템 이미지(압축된 파일 시스템)를 마운트하려고 시도합니다.
  2. FUSE 사용: AppImage는 FUSE를 사용하여 파일 시스템 이미지를 임시로 마운트합니다. 이를 통해 AppImage 내부의 모든 파일과 디렉토리가 접근 가능해집니다.
  3. 소프트웨어 실행: 마운트된 파일 시스템에서 소프트웨어를 실행합니다. 이 과정에서 필요한 라이브러리와 리소스는 모두 마운트된 파일 시스템 내에 포함되어 있어, 시스템에 추가적인 설치나 설정 없이 소프트웨어를 실행할 수 있습니다.
  4. 마운트 해제: 사용자가 소프트웨어를 종료하면, FUSE를 통해 마운트된 파일 시스템은 자동으로 해제됩니다. 이는 시스템에 잔여 파일이나 설정이 남지 않도록 합니다.

간단 요약

  • FUSE: 사용자 공간에서 파일 시스템을 구현하고, 안전하게 파일 시스템을 마운트 및 해제하는 기능을 제공합니다.
  • AppImage: FUSE를 사용하여 내부에 포함된 파일 시스템 이미지를 임시로 마운트하고, 이를 통해 소프트웨어를 실행합니다.

이러한 연결 덕분에 AppImage는 설치 과정 없이도 복잡한 소프트웨어를 쉽게 배포하고 실행할 수 있는 편리한 방법을 제공합니다.

자, 좀 간결하게 이해가 되었을까요? 이렇게 해서 AppImage로 배포되는 프로그램들이 조금씩 늘고 있고, 여러모로 사용되고 있습니다.

Javascript 스터디 – 001 개발도구와 개발 환경, 그리고 hello world

진입장벽이 제일 낮은 곳 아닐까 하는 생각이 든다. 솔직히 그냥 메모장과 웹 브라우저만 있어도 가능하다. 대부분의 실행과 디버그는 웹 브라우저에서 다 진행할 수 있다.

뭐, 메모장은 그래도 좀 그러니깐 그냥 에디터를 이용하자고 하자. 웹은 각종 여러 언어들을 섞어서 개발하다 보니 IDE(통합 개발 환경)으로 나오는 경우가 별로 없다. 있어도 거의 대부분 플러그인 떡칠이다. 그럴꺼면 그냥 에디터 써도 될 정도다. 내 경우에는 주로 Visual Studio Code를 이용한 것을 보여줄 것이다. vim, emacs,인텔리, 에디트플러스 등등 그냥 편한 거 쓰면 된다. 뭐가 좋냐고 물으면 그냥 쓰기 편한 게 좋다고 할 것이다.

그리고 실행과 디버그 자체가 그냥 웹 브라우저를 이용하기만 하면 되기 때문에 그렇게 어려운 것이 없다. 직접 만든 코드를 웹 브라우저에서 돌려보기만 하면 되니깐.

그래서 바로 hello world를 만들어서 보여주려고 한다. code를 열어서 html 페이지를 아래와 같이 하나 만들었다.

그냥 진짜 hello world.

script라고 되어있는 곳에 옛날에는 자바스크립트라고 정의해주고 하는 내용을 넣고 해야 하는데… 요즘은 그냥 저렇게 해도 된다. js가 거의 표준 아닌가 싶을 정도로 널리 쓰이고 있으니깐… (타입 스크립트 이야기 하고 싶으면 나중에 다른 기회를 보자.)

그래서 저 html 파일을 실행하고, 브라우저의 개발자 모드를 보면 아래처럼 hello world가 표시될 것이다.

근데 지금 내가 hello world를 두 군데에 넣어서 뭐가 뭔지 몰겠다 싶으면, 코드 수정하고 저장해보자.

단순 무식한 구분 방법. ㅡㅅㅡ

이렇게 그냥 무식한 방법으로 구분이 되게 했으니 결과는… 무식하게 나온다.

무식하지만 효과는 좋게 나온다. 그래서 난 무식하게 알려주는 걸 좋아한다.

이제 하나하나 다시 시작해보자.

Javascript 스터디 – 000 회기, 그리고 다시 정리

줄여서 js라고 하던데.. 만난 건 엄청 오래전이다. 근데 내가 쓸 때의 js는 진짜 그냥 웹 페이지를 동적으로만 만들어주고 하는 데 이용하던 스크립트 중 하나였다. 거의 2006~2008년부터 만나기 시작해서 알게 된 녀석인데….

이 때 이용자들은 알 것이다. 사이트가 동적으로 움직일 수 있다는 것만으로도 자바가 엄청나게 각광받고, js가 그 자리 안에서 조금씩 발전하고 있는데 각종 알 수 없는 warning 띄우고 할 때에 보면 꼭 이녀석이 난리치고 있던 것도 있고… 뭔가 html 코드 안에서 난잡하게 돌아가고 그런 것들. 그리고 사이트 느리게 만드는 주범 중 하나였고… (그때 뭐 알고 했나.) 그러면서 브라우저끼리 호환도 잘 안되던 과거가 있질 않나… 거기에 더해서 웹 사이트에서 복잡한 기능을 넣고 하질 않았기 때문에 js 코드들도 간단했기 때문에 js 하는 것 = 그냥 왕초보 이런 느낌이었던 시절이다.

근데 지금 와서 웹 하는 데 보면 죄다 js가 기본으로 깔려간다. 웹 클라이언트에서 js 빼고 이야기 못할 정도다. 언어 자체의 성능도 발전하고 jit도 도입되면서 실행 속도도 엄청 빠른 편이다.

게다가 요즘 웹 개발이 주를 이루고 그에 따라 엄청 복잡해지면서 수요도 엄청 늘고, 나같은 임베디드 하던 인간들도 최소한의 설정 작업 만드는 것도 이젠 웹 베이스로 만들어 줘야 하는데 이런 곳에서도 어느정도 알아는 둬야 협업이 된다. 그래서 요즘 웹 관련된 내용을 하나하나 다시 볼려고 한다.

001 – Octave의 설치

https://octave.org 에서 다운로드 받을 수 있다.

윈도우는 전용 인스톨러로, 리눅스와 맥은 각각의 설치 위키를 보고 참조하면 된다. 맥은 homebrew로 설치하면 간단하다. 리눅스는 꼭 위키에 나온대로 설치하는 것이 좋다. 난 이용하기 좋은 윈도우 기준으로 설치에 관련된 몇 가지 이야기만 하겠다. 설치법은 쉬워서 헤멜 일도 없고…

윈도우의 경우, 설치가 이렇게 둘로 되어있다. 32비트 운영체제는 요즘 나오지 않기 때문에 아예 아래에 별도로 설명하고 있는데, 그냥 무시하겠다.

64비트 운영체제여도 두 가지 버전이 존재한다. 일반 버전과 64비트 선형대수 처리가 가능한 버전이다. 설명에도 적혀있듯 최소 32G 이상의 메모리와 함께 이용해야 한다. 그에 맞는 조건이나 연산이 필요한 경우에 컴퓨터 사양을 맞춰서 설졍하면 된다. (근데 아마 램만 64G는 있어야 원활할 것이다.)

설치 방법은 별도로 옵션을 선택하는 것이 없기 때문에 그냥 바로 다음, 다음으로도 쉽게 설치가 가능하다.

다음 글에서는 화면 구성과 함께 간단한 연산과 스크립트 코드 작성을 시작하겠다.

GNU Octave 가장 기초부터 적어보자

나는 대학 다니면서도, 대학원 다니면서도 MATLAB을 썼었다. 그냥 대학에 있으면서 사용할 수 있는 버전을 받아서 쓰고, 다들 그렇게 쓰고 있다보니 자연스럽게 MATLAB을 쓰고 있을 것이다. 그리고 그렇게 이용된 수치 해석 자료로 논문내고 그럴 것이고…

근데, 사회 나가거나 그러면 저거 참 쓰기 힘들다. 라이센스 문제나 가격이나 뭐 여러모로… 사줄 수 있는 회사나 연구실이면 상관 없겠는데 그거 아니면 생각보다 많이 못쓰게 된다.

그럴 꺼면 그냥 Octave를 처음부터 쓸 수 있으면 그게 더 좋은 거 아닌가 하는 생각을 엄청 하는데… 취급이 그냥 대용품은 대용품일 것이다 하고 마는 사람들이 생각보다 많았다. 의외로 문법 호환도 미묘하게 안되는 것도 있고, 각종 호환성 관련해서 몇몇 문제도 있고 하다보니깐…

아, 그리고 퍼포먼스 느린 게 생각 이상으로 실무에서 발목 잡는 건 이해한다. 근데 그런 곳은 이미 알아서 MATLAB 사서 쓰고 있을 것이다. ㅠㅠ

근데 생각보다 유전 알고리즘, 이미지 분석 패키지는 상당히 쓰기 좋은 녀석들도 있기도 하고, 공짜로 이용할 수 있는 만큼 오히려 시작을 이걸로 해야 한다고 보는 시각도 좀 있다. 그래야지 패키지를 개발할 수 있을 정도가 되어서 패키지쪽에도 많은 기능들이 더 늘어나 주고 하면 더더욱 좋은 것이니깐…

그래서 일단 이런 걸로 쓸 줄 안다는 것부터 깔고 가고 싶었다. 그리고 나조차도 이쪽은 문외한이라서… 같이 시작한다는 느낌으로 해보고 싶었다. 그래서 가장 기초부터 적어보려고 한다.