2016-04-16 9 views
2

多くのLinuxディストリビューションがあります。しかし、それらのすべてが共通しているのは、カーネルです。また、Linuxプログラムはすべてのアプリケーションで動作します。私がカーネルから最小限のディストリビューションを作るならば、Linux用に作られた現在のプログラムは動くでしょうか?どのような分布の違いを定義しますか?私はこのものの初心者です。愚かな質問であれば、厳しくはしないでください。ありがとうございますLinuxカーネルを使用して現在のプログラムをサポートしますか?

+0

コードをどのように設計するかに応じて、ほとんどのアーキテクチャで、さらには運用システム全体でもコンパイル可能で正常に動作します。バイナリがプラットフォーム間で動作する場合、今は別の話です。私の知る限り、アプリケーションが標準に含まれていないライブラリに依存していない場合は、同じアーキテクチャー(例えば、X86など)であれば、どのバージョンのLinuxでも正常に動作するはずです。私は間違っている可能性があります。 – Havenard

答えて

1

はい、警告付きです。

あなたは完全なCサポートを持っていることを確認する必要があります。これはglibcがインストールされているか、またはインストール可能であることを意味するか、最小限のインストールでプログラムをビルドできません。 Linux上でCプログラムをインストールしてコンパイルできるのであれば、事実上すべてのものを最初からビルドすることができます。

バイナリをダウンロードして実行したい場合は、これは異なります。バイナリには、作成されたシステム上にある共有ライブラリが必要になる可能性があります。これらのライブラリを持っていなければ、オンラインで見つけた既存のバイナリを実行することはできません。

ディストリビューションの違いを定義するものは何ですか?

各配信には多くの定義要因があります。私たちは、Debian 対のUbuntuすなわち

  • GPL/BSD/nonfreeをリリーススケジュールのDebian対Ubuntuの
  • 対象読者のようなものではDebian
  • スタンス対...

    1. ライセンスすなわちRedHatのようなものを無視した場合

    私は、パッケージ管理のyum/rpm対apt/dpkgが最も重要な要素だと思っています。基本設定がどのようにマシン上で管理されているのでしょうか。これは確かに私が一番使っているようだが、私がディストリビューションを変更したときに一番迷っているようだ。カーネルそのものは私の心の中ではほとんどありませんが、その大部分は成功の一部です。

    ほとんどの人はISO Linuxのようなものから起動し、起動可能なCDを入手しますが、通常はベースディストリビューションを選択します。基本的なディストリビューションを作成したい場合は、それは多大な労力を要します。 Debian/Ubuntuのを見れば、これらの分布は、セットアップを持っているインフラストラクチャの量が非常に膨大であるLinuxの家系のこの偉大な情報グラフィック

    https://en.wikipedia.org/wiki/List_of_Linux_distributions#/media/File:Linux_Distribution_Timeline.svg

    を見てみましょう。彼らは、サポートされているバージョンで動作するように設計された何百万もの数十億行ものコードを多分持っています。あなたはそれらのいずれかからバイナリを取り、Redhatの上でそれを実行することができるかもしれないが、それは惑星が整列している場合を除き、一部の人々は、これは実際に悪いこと

    https://en.wikipedia.org/wiki/Ingo_Moln%C3%A1r#Quotes

    だと思うなど失敗する可能性があります無料のLinuxデスクトップの基本的な失敗は、デスクトップLinuxディストリビューションは、コードの十億行以上からなる「自分」2万
    アプリケーションパッケージにしようとしている、強情、無料ではない 十分...

    だということです が並行して作成されており、主に周囲の閉鎖されたエコシステム...Linuxパッケージ 管理方法システムは企業では合理的にうまく動作しますが(ほとんどの場合 階層型の中央計画組織です)、一方でデスクトップLinux は10年前に1000パッケージ制限でスケーリングを停止しました...

  • 1

    私はカーネルから最小限の配布を行った場合、現在のプログラムは、Linuxの実行のために作られたのだろうか?

    実際にカーネルを直接使用するプログラムはほとんどありません。また、プログラム自体やコードを実行しているVMのいずれかが使用するCルーチンのほとんどを実際に実装する責任があるlibcも必要です。

    libcをプログラムに静的にリンクすることは可能ですが、プログラムのサイズが大きくなり、プログラム全体を再構築することなくリンクライブラリのセキュリティ問題を解決できなくなります。

    1

    特定のプログラムでは、特定のバージョンのカーネルが必要です。通常、これらのプログラムは、システムの残りの部分(例えば、nvidia独自のドライバ:カーネル空間で動作するものとユーザー空間で動作するものがありますが、非常に特定のカーネルモジュールを必要とします。

    プログラムがカーネルから特定の機能を要求する場合がそれほど厳しくない場合があります。例えば、ほとんどすべての現代のLinux仮想化システムは、cgroups機能に依存しています。したがって、それらを使用するには、かなりフレッシュなカーネルが必要です。

    しかし、多くのカーネルAPIは安定しているので、あなたはそれに頼ることができます。しかし、通常、プログラムはカーネルルーチンを直接呼び出しません。カーネル関数を使用する典型的な方法は、カーネルAPIをラップして活用する通信ライブラリルーチンを呼び出すことです。そのような主な、最も基本的なライブラリはlibcです。

    libcの1つのバージョン用にコンパイルされたプログラム(他の共有ライブラリと同様)は、わずかに異なるバージョンの通信ライブラリで使用できます。たとえば、多くの人が完全に異なるLinuxディストリビューションでSuSE用にコンパイルされたSkypeを使用しています。そのSkypeは、リンクされているライブラリがたくさんある非常に複雑なアプリケーションですが、重大な問題はなくても動作します。そのため、他の多くのプロプライエタリなプログラムでは、特定のディストリビューションや特定のインストールに対してコンパイルできませんでした。しかし、時にはたわごとだけ起こる:)これらのバイナリの非互換性は非常にまれですが、時々発生します。

    関連する問題