Linus Torvalds는 이식성에 대한 인용으로 무엇을 의미 했습니까? [닫은]


41

에서 앤드류 타넨 바움과 논쟁 모 놀리 식 운영 시스템 아키텍처 대 마이크로 커널 이상, 리누스 토발즈는 말했다

이식성은 새로운 프로그램을 작성할 수없는 사람들을위한 것입니다.

그는 무엇을 의미 했습니까?


8
"이전"시절부터이 "토론"(불꽃)을 꺼낼 때주의해야 할 점에주의하십시오. 리눅스가 리누스의 마음에 매우 사랑했기 때문에이 토론에서 많은 감정이 떠오른 것 같습니다. 그러므로 당신은 단지 건방진 또는 누군가를 화나게하기 위해 만들어지는 많은 진술을 보게 될 것입니다.
Wayne Koorts

이러한 유형의 질문은 현재 메타 토론 사이트에서 논의되고 있습니다 .

1
권장 독서 : $ {blog} 토론
gnat

답변:


82

Linus가 토론에 글을 쓸 때, 혀가 뺨에 있습니다 (즉, 너무 심각하게 받아 들여서는 안 됨).

그런 다음 그는 이식성이 좋은 반면, 또한 절충이라고 설명합니다. 이식 불가능한 코드는 훨씬 간단 할 수 있습니다. 즉, 코드를 완벽하게 이식 가능하게 만드는 대신 간단하고 이식 가능하게 ( "휴대용 API 준수") 만든 다음 이식해야하는 경우 필요에 따라 다시 작성하십시오. 코드를 완벽하게 이식 가능하게 만드는 것도 조기 최적화의 형태로 간주 될 수 있습니다.

물론 새로운 프로그램을 작성할 수없고 원래 프로그램을 고수 해야하는 경우 불가능합니다. :)


20
조기 최적화에 동의했습니다.
Mark Gibaud

4
+1 리누스는 뺨에 유머가있는 혀로 유명하지만 어떤 사람들은 자신의 말을 너무 심각하게 받아들입니다.
Spoike

12

그것은 각 프로그램이 실행되는 하드웨어 및 운영 체제를 위해 특별히 작성되어야 함을 의미한다고 생각합니다.

그는 여러 플랫폼에서 실행할 수있는 범용 코드가 특정 플랫폼 용으로 특별히 작성된 코드보다 덜 효율적이거나 오류가 발생하기 쉽다고 생각합니다. 그러나 이것은 이와 같이 개발할 때 몇 가지 다른 코드 라인을 유지해야 함을 의미합니다.


나는이 생각 을 정확하게 그가 무엇을 의미하는지
Chani

9

리눅스가 처음 쓰여졌을 때, 그것은 당시 상당히 새롭고 비싼 i386 CPU에서만 사용 가능한 기능을 사용했습니다.

바로 리눅스가하는 일입니다. 다른 커널보다 386 기능의 더 큰 부분 집합 만 사용합니다. 물론 이것은 커널을 이식 할 수 없게 만들지 만 / much / 더 단순한 디자인을 만듭니다. 수용 가능한 트레이드 오프, 그리고 처음부터 리눅스를 가능하게 한 것.

우리가 21 세기에 들어서면서 i386을 독특하게 만든 기능은 완전히 주류가되었으며 Linux는 이식성이 뛰어났습니다.


2
"... 완전히 주류가되어 리눅스를 휴대하기가 쉬워졌다"고 당시 시점에서 리눅스의 이식성이 조기에 최적화되었을 것임을 증명했다.

2
@ 로거 : 정말 동의 할 수 없습니다. 이러한 기능은 주류가되었지만 그 이후로 CPU는 더 많은 기능을 추가했습니다. 그 중 많은 기능이 Linux를 완전히 무시하거나 최소한으로 만 사용하거나 합리적으로 잘 사용하기 위해 대량으로 (그리고 고통스럽게) 다시 작성해야했습니다. 동시에, Linus는 적어도 어느 시점을 가지고 있습니다. 현재 합리적으로 잘 작동하는 (비 포터블)은 수년 동안 이야기되었지만 결코 끝나지 않은 것 (예 : GNU HURD)을 능가합니다.
Jerry Coffin

@Jerry-내가 일했던 곳에서 연구 프로젝트처럼 들린다. "지금 포기해야한다. 내가하고있는 일이 쓸모 없게 될 것이다." 그것은 20 년 전이었습니다. 아직도 위즈 뱅의 새로운 것들이 연구소를 떠나는 것을 보지 못했습니다.
quick_now

@Roger, 이식성은 최적화가 아닙니다.

7

많은 Java를 해왔고 수년간 주 단위로 "한 번 쓰기, 모든 곳에서 디버그"현상을 경험 한 사람으로서 나는 이것과 완전히 관련 될 수 있습니다.

그리고 Java는 아마도 좋은 예일 것입니다. 심지어 휴대가 불가능한 언어 / 툴킷으로 이식 가능한 코드 기반으로 사람들이 무엇을 시도하는지 상상조차 할 수 없습니다.

현재 직장에서 우리는 모바일 장치 용 제품 중 하나의 라이트 버전을 작성한다는 아이디어를 조사하고 있습니다. J2ME와 Android 모두에서 이식 가능한 버전을 수행하는 방법에 대한 연구를 수행했습니다. 가능한 많은 코드베이스를 공유하려고 시도합니다 (분명히 "이동할 수는 없지만"그 자체의 철학입니다. ). 악몽이다.

그렇습니다. 때로는 주어진 작업에 주어진 도구를 사용하는 관점에서 생각하고 행동하는 것이 좋습니다. 즉, 하나의 단일 모 놀리 식 플랫폼 / 환경에 대해 자유롭게 개발합니다. 그리고 각각 별도의 깨끗한 버전을 작성하십시오.


5

비록 어떤 사람들은 이식성, 표준 등을 도덕적으로 우월한 것으로 보거나 처리하지만, 실제로 그것이 요약하는 것은 경제학입니다.

이식 가능한 코드를 작성하려면 코드를 이식 가능하게 만들려는 노력이 필요하며, 모든 대상에서 사용할 수없는 일부 기능에 대해서는 앞서 언급했습니다.

이식 불가능한 코드는 새로운 아키텍처에 관심이있을 때 / 경우에 따라 코드를 포팅하는 데 드는 비용과 (종종) 원래 대상에서 사용할 수 없었거나 제공되지 않은 일부 기능에 대해 비용이 많이 듭니다.

큰 한정자는 "새로운 아키텍처에 관심이있는 경우 /있는 경우"입니다. 휴대용 코드를 작성하는 것은 업 정면의 노력이 필요 희망이 거의 없거나 전혀없는 노력으로 새로운 / 다른 아키텍처에 해당 코드를 사용할 수있는의 최종 보수의를. 이식 불가능한 코드를 사용하면 특정 대상으로 실제로 이식해야 할 때까지 (적어도 합리적으로) 포팅에 대한 투자를 지연시킬 수 있습니다.

많은 대상으로 포팅 할 것이라고 미리 확신한다면, 장기 포팅 비용을 최소화하기 위해 선불 투자하는 것이 좋습니다. 코드를 얼마나 많이 포팅해야하는지 확실하지 않은 경우 이식성이없는 코드를 작성하면 선행 비용을 최소화하고 코드 이식성 비용을 지연 시키거나 완전히 피할 수 있습니다.

또한 "휴대용"과 "휴대용이 아닌"에 대해 두 사람 사이에 분명한 구분이있는 것처럼 말한 것도 주목할 가치가 있다고 생각합니다. 실제로 이것은 사실이 아닙니다. 이식성은 완전히 휴대 할 수없는 (예 : 어셈블리 코드)에서 휴대 성이 뛰어난 (예 : Info-zip), 그 사이의 어느 곳에서나 실행되는 연속체입니다.


4

Tanenbaum은 많은 Linux가 CPU 상호 작용을 구성 요소로 만들기 때문에 당시의 최신 상태 인 386 CPU를 활용하기 위해 비 모듈 식 방식으로 작성되어 매우 쉽게 교환 할 수 있다고 지적합니다. Tanenbaum은 본질적으로 커널이 매우 모 놀리 식이며 386 CPU에 묶여 있다는 사실은 매우 어렵다고 생각합니다.

  • Linux 자체를 다른 CPU 플랫폼으로 포팅 (분명히 올바르지 않음, AMD64, PowerPC 등)
  • Linux x86 용으로 작성된 다른 프로그램을 다른 CPU 아키텍처로 포트 프로그램

리눅스 캠프는 몇 가지 점을 지적합니다.

  • 리눅스는 디자인의 일부로 다중 스레드 파일 시스템을 제공합니다
  • Microkernel은 흥미롭고 직관적이지만 성능이 좋지 않습니다.
  • 이식 가능한 API 준수는 블로커와는 달리 이식성 문제를 더 또는 덜 조잡하게 만듭니다.

1
이 토론이 진행될 당시, 이식성은 훨씬 더 큰 관심사였습니다. AMD64와 PPC는 몇 년이되었습니다.
Matt Olenik

1
Linus를 포함한 다른 사람들은 Tanenbaum이 생각한 것만 큼 큰 걱정거리가 아니라고 지적했습니다
Anatoly G

마이크로 커널이 잘 수행되지 않습니까? 그것은 우리를 사용했던 사람들에게 충격이 될 것입니다.
내 올바른 의견에

나는 내가 마하 (OSX)를 사용하고 잘 작동 - 마이크로 커널이 잘 작동하지 않는 것을 생각하지 않습니다. 그러나 리누스는 언급했다.
Anatoly G

3

이식 가능한 코드를 작성하려면 이식 가능한 코드를 작성해야합니다.

그게 무슨 소리 야?

디자인은 목적을 반영해야합니다. 예를 들어, 언어가 C 인 경우 작동하려면 최소 코드 줄 수를 변경해야합니다. 이것은 종종 디스플레이와 계산을 분리하는 것을 의미하며, 이는 좋은 설계 철학 (MVC)입니다. 좋은 컴파일러에 액세스 할 수 있다면 대부분의 C 코드는 어디서나 컴파일 할 수 있습니다. 그것을 활용하고 당신이 일반적 일 수있는 한 많이 쓰십시오.

BTW,이 답변은 응용 프로그램에만 적용됩니다. OS와 임베디드은 완전히 다른 동물입니다.


2

이 말을 "문학적으로"해석하십시오.

Linus의 또 다른 인용문에서 그는 다음과 같이 말했다. "C ++는 모든 잘못된 문제를 해결하려고 노력하고있다. C ++가 해결하는 것은 사소한 것인데, 일부는 진정한 심오한 문제를 해결하기보다는 순전히 C 로의 구문 확장이다."

또한 그의 전기에서 마이크로 커널에 대해 인용하면서 "Just For Fun"리누스는 문제를 '1 / n'의 고유 한 부분으로 나누면 복잡성 'n'에 관한 문제에 대해 다음과 같이 말했다. 'n!' 이것 자체는 그러한 것을 시도하지 않을 정도로 충분한 요소이며, 그러한 복잡한 시스템에서 효율을 추출하는 것은 매우 어려울 것입니다.


2

이러한 토론 중에 Linux는 매우 새롭고 대체로 386 전용 OS라는 사실을 고려해야합니다. 오늘 Linus에게 물었다면 다른 의견을 가질 것입니다. 어쩌면 Tannenbaums만큼 극단적 인 것은 아니지만 아마도 그에게 고개를 끄덕이고 그가 옳은 일이라고 말할 것입니다.

리누스와 다른 커널 개발자들은 리눅스를 이식 가능하게 만드는 데 많은 어려움을 겪었지만 리누스가 이식성을 갖춰야한다면 리눅스는 존재하지 않았을 것이다.


2

좋은 프로그램을 작성할 수있는 사람들은 처음부터 일할 수 있기 때문에 이식성이 없어야한다는 것을 의미합니다.

다른 프로그램 (이동성)을 현재 프로그램으로 "가져 오기"하려는 재능이 적은 프로그래머입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.