GNU 배포판은 어떻게 구성되나요? GNU가 아닌 Linux 배포판이 있습니까? [복사]

GNU 배포판은 어떻게 구성되나요? GNU가 아닌 Linux 배포판이 있습니까? [복사]

따라서 GNU/Linux는 Linux kenel, gcc, gnu-binutils, Gnome 데스크탑 등 최소한 여러 프로그램으로 구성된 운영 체제입니다.

  • Linux 배포판 GNU를 만드는 이유는 무엇입니까? 커널 컴파일을 위한 도구인가요? 배포판과 함께 제공되는 도구입니까?

  • Linux 기반이지만 GNU는 아닌 모든 기능을 갖춘 데스크톱 운영 체제가 있습니까?

답변1

이것자유 소프트웨어 재단은 다음과 같이 믿습니다.대부분의 Linux 배포판은 실제로 Linux 커널을 사용하는 GNU 시스템입니다. 그들은 Linux가 등장하기 전에 GNU가 자유 운영 체제를 개발하기 위한 장기 프로젝트였다는 사실에 근거하여 이러한 주장을 하고 있습니다.커널은 마지막 누락된 조각일 뿐입니다.. 거의 모든 Linux 기반 데스크톱 및 서버 배포판은 최소한 일부 GNU 구성 요소를 사용하며 아마도 가장 중요한 것은 맞습니다.GNU C 라이브러리(글리BC),GNU 핵심 유틸리티(coreutils) 및불다껍데기. 게다가 Linux 커널 개발은 본질적으로 GCC와 관련되어 있습니다.GCC 확장 활용.

일부 임베디드 시스템, 특히 Google의 Android는 GNU 구성 요소나 라이브러리를 사용하지 않습니다. 예를 들어 Android에서는 GNU C 라이브러리가 Google의 자체 BSD 기반 Bionic C 라이브러리로 대체되었습니다. FSF는 다음과 같은 시스템을 언급하는 데 동의합니다."GNU 시스템" 또는 "GNU/Linux", 그러나 반면에 그들은 이러한 시스템이 단지 "Linux" 시스템이라고 불리는 것을 원하지 않습니다. 최소한 우리는 커널을 구축하기 위해 GNU 도구를 사용하는 것에 대한 합의가 있는 것 같다는 결론을 내릴 수 있습니다.아니요시스템을 "GNU 시스템"으로 만듭니다.

답변2

GNU/Linux라는 용어는 1990년대 초반으로 거슬러 올라갑니다.

1991년 Linus Torvalds는 헬싱키에 있는 자신의 침실에서 Linux 커널 프로젝트를 시작했습니다. 얼마 지나지 않아 Linux 커널은 인터넷의 발전에 힘입어 상당한 관심을 끌기 시작했습니다.

Richard Stallman의 GNU 프로젝트는 여전히 HURD 마이크로커널을 계획된 GNU 운영 체제의 커널로 사용할 계획이었습니다. 그러나 새로운 Linux 커널 프로젝트를 중심으로 Linux 배포판(Linux 커널을 기반으로 한 무료 Unix 계열 운영 체제)이 형성되기 시작하면서 Stallman은 관심을 갖게 되었습니다. 1993년 Ian Murdock의 지도 하에 데비안 프로젝트가 시작되었을 때 FSF는 이 젊은 프로젝트에 재정적 지원을 제공했습니다. 그러나 데비안 개발자들은 부분적인 기술적 문제로 인해 곧 Stallman 및 FSF와 헤어졌습니다. 예를 들어, 한 가지 문제는 Stallman이 프로그램에서 디버깅 기호를 계속 유지하려는 반면 Debian은 이를 제거하려고 한다는 것입니다.

데비안과 FSF가 갈라진 후 Stallman은 데비안을 GNU/Linux라고 부르도록 요청했습니다. Murdoch가 그에게 리더십을 넘겨주었기 때문에 Bruce Perrance에게 요청이 이루어졌습니다. 조직들이 서로 우호적으로 헤어지고 공통의 목표를 공유했기 때문에 데비안 개발자들은 요청받은 대로 했습니다. 물론 Stallman은 이러한 이름을 독립적으로 홍보했지만 실제 Linux 기반 운영 체제가 자신을 언급하는 데 협력하는 것은 이러한 이름의 사용을 홍보하는 데 중요했습니다.

Stallman이 제시한 이유는 다음과 같습니다: (a) Linux 커널을 제외한 시스템의 핵심은 주로 GNU 도구입니다. (b) Linux 커널은 어떤 의미에서 GNU 프로젝트의 정점/완성입니다. 일자리를 얻으려면 커널이 존재한 지 꽤 되었기 때문에 사람들에게 GNU 프로젝트의 이상을 인정하고 상기시키는 방법으로 이 이름을 사용해야 합니다. 이유 (a)는 Linux 기반 운영 체제의 분명히 중요한 부분이 bash, gcc, binutils, gdb와 같은 GNU 도구에 의존한다는 사실에도 불구하고 당시에는 완전히 사실이 아니었지만 지금은 훨씬 덜 사실이지만 더 자주 언급되는 경향이 있습니다. , libc 등. 어떤 경우에는 다른 도구로 대체될 수 있습니다. 따라서 그러한 주장은 적어도 논쟁의 여지가 있으며 실제로 많은 논쟁을 불러일으켰습니다.

내가 아는 한, Debian과 그 (일부) 파생물(부모를 따라가는)만이 스스로를 GNU/Linux라고 부릅니다. 그러나 Fedora, Gentoo 등과 같은 소위 Linux 배포판은 본질적으로 Debian과 다르지 않습니다. 대부분 동일한 소프트웨어입니다. 그러므로 사람들이 GNU/Linux라고 부르는 데에는 그럴만한 이유가 있습니다.

GNU 사용자 공간 없이 Linux 커널을 사용하는 시스템은 많지 않습니다. 두 시스템은 주로 함께 개발되었으며 다양한 방식으로 얽혀 있기 때문입니다. (예를 들어, Linux 커널은 gcc(GNU)에 대한 확장을 사용하여 C로 작성되었으며 표준 C 컴파일러를 사용하여 구축되지 않습니다.) Thomas가 말했듯이 가장 확실한 예는 Android이지만 Android에 의해 많이 포크되었기 때문에 Google은 향후 병합/조화에 대한 이야기가 있음에도 불구하고 Android 커널을 Linux라고 부르는 것이 맞는지 의문입니다.

그건 그렇고, 불행하게도 Stallman과 FSF는 GNU/Linux 용어 사용에 대해 상당히 엄격한 것으로 보입니다. 예를 들어 조나단 코베트(Jonathan Corbett)LWN 댓글에 썼습니다FSF는 그가 GNU/Linux라는 용어를 사용하지 않는 한 그와의 대화를 거부했습니다. Jon은 LWN의 창립자일 뿐만 아니라 매우 존경받는 수석 커널 개발자이기도 합니다. 댓글 전문은 다음과 같습니다.

명확히 하자면, 우리는 FSF가 우리가 말할 내용과 사용할 용어에 대한 사전 약속 없이 우리와의 대화를 거부했기 때문에 몇 년 전에 FSF에 조언을 요청하는 것을 중단했습니다. 우리는 그런 약속을 하고 싶지 않습니다. 그러한 문제에 대한 FSF의 정책이 변경되는지 알려주시면 기쁩니다.

이는 분명히 GNU/Linux 용어 등을 고집하는 것에 대한 언급입니다.

위의 기록은 Glyn Moody의 Rebel Code 6장("부팅 후 루트")에 자세히 설명되어 있습니다.

답변3

운영 체제는 커널과 사용자 공간의 조합입니다. 기본적으로 커널은 하드웨어를 관리하는 반면, 사용자 영역은 사용자에게 포괄적인 인터페이스를 제공합니다.

일반적인 GNU/Linux 배포판에서는리눅스핵심을 제공하는 동시에GNU 프로젝트사용자 레이어 도구를 가져옵니다. GNU는 Linux보다 먼저 출시되었으며 완전한 운영 체제를 구축하기 위한 수많은 유틸리티를 제공합니다.

그러나 코어가 없습니다. 그들은 비록허드커널, 준비 시간이 너무 깁니다. 그런 다음리눅스가 온다엄청난 열정에 힘입어 허드보다 빠르게 성장하고 있습니다.

이제 서로 다른 두 프로젝트의 사용자 공간과 커널이 생겼습니다. 운영 체제를 갖추려면 모든 사람이 필수적이므로 협회 이름을 지정하는 것은 어떻습니까?GNU/리눅스그렇다면 각 프로젝트마다 고유한 크레딧이 부여되나요?

BSD 유틸리티와 같은 다른 사용자 영역이 있거나바쁜 상자. 그러나 GNU 유틸리티에 비해 다소 완벽하며 일부 소프트웨어는 GNU 사용자 공간에서만 실행될 수 있습니다. 예를 들어, 대부분의 BSD 운영 체제는 GCC를 컴파일러로 사용합니다.LLVM그것은 곧 바뀔 것입니다.

범용 운영 체제로서 다음을 실행할 수 있습니다.FreeBSD 커널과 GNU 사용자 영역을 갖춘 데비안.

답변4

Linux 배포판 GNU를 만드는 이유는 무엇입니까? 커널 컴파일을 위한 도구인가요? 배포판과 함께 제공되는 도구입니까?

예 예. 커널은 완전히 독립적인 실행 파일입니다.모든 것다른 것들은 "사용자 영역”. 일반적으로 사용자 공간 응용 프로그램은 표준 C 라이브러리인 하나 이상의 시스템 라이브러리를 사용합니다. 1 다양한 유틸리티 기능 외에도 시스템(예: 커널)이 다음과 같은 작업을 수행하도록 요청하는 시스템 호출에 대한 액세스도 제공합니다. 파일 작업과 같은 매우 기본적인 작업에도 필요합니다. Linux에서 사용되는 C 라이브러리 구현은 GNU C 라이브러리인 glibc입니다.

Linux 커널 자체는 C로 작성되었으며 작동하려면 C 라이브러리도 필요합니다. 단, 이 경우 필요한 부분은 외부가 아닌 내부적으로 컴파일됩니다. 이러한 목적으로 일반적으로 사용되는 컴파일러는 GCC("GNU Compiler Collection")이고, C 라이브러리는 glibc입니다.

거의 모든 사용자 공간은 glibc에 대해 컴파일되므로 시스템에서 커널 다음으로 가장 중요한 것 중 하나입니다. 또 다른 중요한 구성 요소는 실행 파일을 외부 라이브러리에 연결하는 링커입니다. 그것도 GNU 제품입니다.

이를 설명하기 위해 라이브러리를 포함한 다양한 실행 파일을 사용할 수 있습니다 ldd(실행 가능하지만 독립 실행형은 아님). 매뉴얼 페이지에 나와 있듯이 "ldd는 각 프로그램에 필요한 공유 라이브러리나 명령줄에 지정된 공유 라이브러리를 인쇄합니다." 예를 들어:

> ldd /bin/bash
    linux-vdso.so.1 =>  (0x00007fff7348e000)
    libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007fdbdae7f000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007fdbdac7b000)
    libc.so.6 => /lib64/libc.so.6 (0x00007fdbda8c3000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fdbdb0c8000)

"libc.so.6"을 참고하세요. 이것은 glibc입니다(Linux용 또 다른 기본 GNU 제품이지만 glibc만큼 기본적이지는 않은 glib와 혼동하지 마세요). 언급된 다른 모든 항목(아래 설명된 첫 번째 항목 제외)을 살펴보면 모두 libc 자체에 연결되어 있음을 알 수 있습니다. libc.so.6 자체를 살펴보겠습니다.

> ldd /lib64/libc.so.6
    /lib64/ld-linux-x86-64.so.2 (0x00007f9cefa04000)
    linux-vdso.so.1 =>  (0x00007fffb21ff000)

"ld-linux-x86-64.so.2"는 위에서 언급한 링커입니다(보통 이며 ld매뉴얼 페이지가 있습니다). ldd를 실행할 수는 없지만 filelibc(순환처럼 들리지만 그렇지 않음) 및 linux-vdso에 동적으로 연결되어 있다고 나와 있습니다. 마지막 것은 조금 흥미롭습니다 =>. 왜냐하면 이것이 실제로 커널의 일부이기 때문입니다.

C 라이브러리, AFAIK, 예오직시스템의 공유 객체는 C 라이브러리에 연결되어 있지 않습니다.센터전체가 엉망입니다. 다른 컴파일 언어의 기본 라이브러리도 libc를 사용합니다. 예를 들면 다음과 같습니다.

> ldd libstdc++.so.6.0.17 
    linux-gate.so.1 =>  (0xf77b8000)
    libm.so.6 => /lib/libm.so.6 (0xf7684000)
    libc.so.6 => /lib/libc.so.6 (0xf74d2000)
    /lib/ld-linux.so.2 (0xf77b9000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xf74b5000)

라이브러리와 링커에는 심볼릭 링크를 통해 구현된 다양한 가명이 있습니다(예: /lib64/ld-linux-x86-64.so.2는 실제로 /lib64/ld-2.15.so입니다).

또한 gcc"네이티브" 컴파일러(커널과 C 라이브러리를 컴파일하므로)는 시스템에 있을 필요가 없지만 libc와 ld는 있어야 합니다. 그렇지 않으면 아무것도 작동하지 않습니다.


이것이 GNU가 제공하는 유일한 기능은 아닙니다. 그들은 또한 bash시스템을 *nix와 유사하고 (대부분) POSIX와 호환되게 만드는 쉘과 기타 핵심 도구 및 유틸리티를 담당합니다 . GNOME은 최초의 Linux DE 중 하나이자 가장 널리 사용되는 Linux DE 중 하나입니다. GNOME 및 기타 DE 등을 지원하는 많은 고급 기능을 제공하는 앞서 언급한 glib도 있습니다. GNOME은 원래 GIMP용으로 개발된 GTK를 기반으로 구축되었습니다. GTK는 다양한 다른 DE의 기초이기도 하며, GIMP도 GNU 제품입니다. 그들은 많은 일을 합니다.


1 어떤 라이브러리에도 연결되지 않는 사용자 공간 애플리케이션이 있습니다 .변화 없는실행 파일. 이는 본질적으로 커널과 마찬가지로 해당 라이브러리의 일부가 컴파일되어 있음을 의미합니다.

관련 정보