ทำไมนักพัฒนา Linux ไม่สามารถสร้างรูปแบบบรรจุภัณฑ์สากล?


14

การเลือกรูปแบบแพ็คเกจไบนารีของผู้ให้บริการนั้นขึ้นอยู่กับรูปแบบของกฎของเมอร์ฟี: สิ่งรบกวนทั้งหมดที่คุณไม่ได้ใช้มีแพ็คเกจ (Corralary: ไม่มีการแจกจ่ายที่ตรงกับการอ้างอิงการกระจายของสแต็กซอฟต์แวร์ของคุณ)

นี่เป็นเรื่องของการเมืองหรืออะไรที่ลึกซึ้งกว่านี้ซึ่งเราไม่เคยเห็นรูปแบบแพคเกจ "สร้างครั้งเดียวทำงานได้ทุกที่"?


3
คุณดูเหมือนจะมีความเข้าใจเพียงผิวเผินเกี่ยวกับความแตกต่างของการแจกแจงจากกัน การรวมระบบแพ็คเกจยังคงไม่ได้หมายความว่าแพคเกจสามารถใช้แทนกันได้ระหว่างการแจกแจง คำถามของคุณไม่มีความหมายเลย

3
กระโดดทำไมคุณไม่เขียนคำตอบที่ให้คำอธิบายผิวเผินน้อยลงเกี่ยวกับความแตกต่างระหว่างการแจกแจง? คำถามนี้ได้รับการกล่าวอย่างไร้เดียงสา แต่มีคำตอบทางเทคนิคที่รอให้
jldugger

คุณกำลังมองหา"ฐานมาตรฐาน Linux"
Bill Weiss

ทำไมนักพัฒนา Windows ไม่สามารถสร้างรูปแบบบรรจุภัณฑ์ที่หลากหลายได้เช่นกัน ไม่ห่อของ Windows ที่นี่ แต่พวกเขามีวิธีการมากมายในการติดตั้งซอฟต์แวร์และไม่มีที่เก็บเดียวเช่น Linux ที่มีทั้ง ... (นี่เป็นคำถามเชิงโวหาร btw)
Mark Henderson

คำตอบ:


24

ดูเหมือนจะเหมาะสมที่จะพูดถึงJoel Spolskyในอันนี้:

(โดยวิธีการสำหรับผู้ที่ติดตามโลกอาถรรพ์ แต่มีค่าใช้จ่ายทางการเมืองของรูปแบบฟีดการเผยแพร่บล็อกคุณสามารถเห็นสิ่งเดียวกันที่เกิดขึ้นที่นั่น RSS กลายเป็นรุ่นที่แตกต่างกันหลายรุ่นข้อกำหนดที่ไม่ถูกต้องและการต่อสู้ทางการเมืองมากมาย และความพยายามในการทำความสะอาดทุกอย่างด้วยการสร้างรูปแบบอื่นที่เรียกว่า Atom ทำให้เกิด RSS รุ่นต่าง ๆ มากมายรวมทั้ง Atom หนึ่งเวอร์ชันข้อมูลจำเพาะที่ไม่ถูกต้องและการต่อสู้ทางการเมืองมากมายเมื่อคุณพยายามรวมกองกำลังฝ่ายตรงข้ามสองกลุ่มด้วยการสร้างทางเลือกที่สาม คุณจบลงด้วยกองกำลังสามฝ่ายคุณไม่ได้รวมอะไรเลยและคุณไม่ได้แก้ไขอะไรเลย)

(เน้นเพิ่ม)

คุณมีสองระบบบรรจุภัณฑ์สำหรับ Linux นั่นเป็นสิ่งที่ดีจริงๆ ระบบเดียวก็จะสร้างระบบที่สาม


Re: เมื่อคุณพยายามรวมกองกำลังฝ่ายตรงข้ามสองกองด้วยการสร้างทางเลือกที่สามคุณแค่จบด้วยกองกำลังฝ่ายต่อต้านสามกอง ดูเพิ่มเติมที่ : xkcd.com/927
JamesBarnett

20

มีหลายเหตุผลสำหรับสิ่งนี้และมีประวัติเล็กน้อยเพื่อที่จะนำสิ่งต่าง ๆ เข้ามาในมุมมอง

จำไว้ว่าเมื่อเราพูดถึง "Linux" สิ่งที่เราอ้างถึงคือหนึ่งในลีนุกซ์รุ่นต่างๆ "Linux" เป็นเพียงเคอร์เนลระบบปฏิบัติการ

เป้าหมายดั้งเดิมของ Linux คือการสร้างระบบที่ใช้ Unix ซึ่งจะทำงานบนพีซี (เริ่มแรกคือ 386) ขั้นตอนแรกคือการสร้างเคอร์เนลเอง ในขณะที่Linus Torvaldsได้ทำงานในเคอร์เนลริชาร์ดสตอลแมนได้ทำงานในตัวเองของเขาฟรีระบบ Unix ภายใต้GNU (GNU ของไม่ Unix) โครงการ เพื่อตัดเรื่องสั้นให้สั้นทั้งสองมาบรรจบกันเพราะ GNU มีเครื่องมือที่เกี่ยวข้อง (คอมไพเลอร์ / ไลบรารี่ / เครื่องมือสร้าง, เชลล์, โปรแกรมแก้ไขข้อความเป็นต้น) แต่ไม่มีคอร์ที่จะทำงานบนมันและ Linux มีแกนกลาง วิ่งบนมันเพื่อให้มีประโยชน์สำหรับฝูง

การบรรจบกันนี้เป็นที่รู้จักกันค่อนข้างเป็น GNU / Linux คุณจะเห็นว่า distros จำนวนมากยังคงอ้างถึงตัวเองว่าเป็นดิสทริบิวชัน GNU / Linux

ด้วยลักษณะที่อิสระและเปิดกว้างของ GNU / Linux ทุกคนสามารถหยิบมันขึ้นมาและสร้างระบบที่รวมมาเพื่อรสนิยมเฉพาะของพวกเขา ผลที่ได้คือสตรีมที่แตกต่างกันจำนวนมากของวิธีการกำหนดค่าที่แตกต่างกันถูกนำมาใช้ในการสร้างระบบเหล่านี้ซึ่งมีผลข้างเคียงของการสร้างระบบการจัดการแพ็กเกจที่แตกต่างกันเกือบจะเท่ากันเพื่อให้เหมาะสมกับแต่ละระบบ

แต่ละระบบที่สมบูรณ์แบบที่แตกต่างกันมีผู้ติดตามที่แข็งแกร่งของตัวเองที่ติดอยู่กับพวกเขาในช่วงปีที่ผ่านมาส่งผลให้ในสิ่งที่เรามีวันนี้: กำมือของที่ใช้กันอย่างแพร่หลายหยั่งรากลึกและระบบการจัดการแพคเกจที่มีเสถียรภาพเช่นRPM , APT / dpkgและ Gentoo ของพอร์เทจ

มีโครงการต่าง ๆ เช่นAutopackageซึ่งกำลังพยายามที่จะแก้ปัญหา แต่วิวัฒนาการอย่างต่อเนื่องของระบบการจัดการบรรจุภัณฑ์ที่รองรับต่าง ๆ หมายความว่ามีเป้าหมายที่จะต้องทำตาม

สิ่งที่ผู้จำหน่ายซอฟต์แวร์บางรายทำคือการรวมไบนารีที่เฉพาะเจาะจงและสำเนาของการอ้างอิงที่พวกเขาต้องการลงในแพ็คเกจขนาดใหญ่ซึ่งจะทำงานบนระบบที่เฉพาะเจาะจง


8
มีมากกว่านั้น แม้ว่าโลกทั้งโลกจะรวมกันเป็น rpm แต่คุณก็ยังไม่ได้รับบรรจุภัณฑ์ครั้งเดียววิ่งไปทั่วโลกที่ OP เห็น แพคเกจมีเฉพาะสำหรับส่วนใหญ่ distro ของพวกเขาเนื่องจากพวกเขาพึ่งพาแพ็คเกจอื่น ๆ ทั้งหมด วิธีเดียวที่จะมี "แพ็กเกจครั้งเดียวรันได้ทุกที่" ในโลกนี้ไม่เพียง แต่จะมีระบบแพ็กเกจเดียวเท่านั้น แต่ยังมีระบบ distro เดียว
Cian

9

การมีรูปแบบแพ็คเกจเดียวกันจะไม่ช่วยได้ คุณไม่สามารถใช้แพ็คเกจเดียวกันในการแจกแจงอื่น ๆ คุณไม่สามารถใช้มันในรุ่นที่ต่างกันของการกระจายตัวเดียวกัน และแม้แต่การสร้างแพ็คเกจก็อาจมีปัญหาเหมือนกัน

ในการติดตั้งแพคเกจคุณต้องปฏิบัติตามการพึ่งพาที่เกิดขึ้นระหว่างการสร้างแพ็คเกจ ในการสร้างแพ็คเกจคุณต้องปฏิบัติตามการพึ่งพาโครงสร้าง และสิ่งเหล่านี้เปลี่ยนไป เพื่อให้สามารถใช้การเปลี่ยนแปลงได้ง่ายขึ้นที่จะสนับสนุนเฉพาะแพ็คเกจที่คุณสามารถปรับเปลี่ยนให้ใช้งานได้หลังจากการเปลี่ยนแปลง

ถ้าการพึ่งพาทั้งหมดจะเหมือนกันมันจะไม่เป็นการแจกแจงที่แตกต่างกันหรือการแจกแจงแบบเดียวกันที่ต่างกัน


4
จะเป็นไปไม่ได้ไหมที่ไลบรารี่รุ่นนั้นจะใช้เวอร์ชั่นอ้างอิงเพื่อแก้ปัญหาที่คุณพูดถึง?
jldugger

คุณพูดถึงว่าคุณไม่สามารถใช้ debs จากรุ่นหนึ่งกับรุ่นอื่น นั่นไม่เป็นความจริงอย่างสิ้นเชิงมีข้อยกเว้นสำหรับกฎนั้น ถ้าแพ็คเกจส่วนใหญ่เป็นไพ ธ อนหรือถ้าบิตทั้งหมดที่รวบรวมแบบคงที่คุณก็สามารถทำได้ มีแม้กระทั่งผู้ขายสองรายที่รวมการพึ่งพาทั้งหมดไว้เป็นส่วนหนึ่งของแพ็คเกจทำให้เปลืองพื้นที่ดิสก์ แต่สร้างแพ็คเกจข้ามแพลตฟอร์ม
Zoredache

แม้ว่าแพ็คเกจจะเป็น arch: ทั้งหมดหรือภาษาสคริปต์มีความแตกต่างที่สำคัญระหว่าง python2.4 และ python2.6 ที่จะทำให้แพ็คเกจที่ใช้งานได้ในแพลตฟอร์มที่สร้างขึ้นและล้มเหลวกับแพคเกจอื่น ๆ
jldugger

ใช่มันไม่ได้เกี่ยวกับการพึ่งพาห้องสมุด
iny

การปรับปรุงเดเบียนบางส่วนได้เปลี่ยนตำแหน่งที่ควรวางไฟล์หรือให้ระบบที่เป็นมาตรฐานสำหรับการอัปเดตไฟล์กำหนดค่าที่เคยจัดการด้วยตนเองมาก่อน .. สิ่งนี้เป็นเวอร์ชั่น / distro ที่เฉพาะเจาะจงมาก
pjc50

7

ฉันคิดว่ามีบ้างเล็กน้อยของ "Not Invented Here Syndrome" ระบบบรรจุภัณฑ์ของ Debian มีคุณสมบัติ RedHat และยังเหนือกว่าในหลาย ๆ ด้าน แต่คุณจะไม่เคยเห็น RedHat switch คุณจะเห็นผู้คนจำนวนมากที่ใช้ "apt-rpm" ซึ่งพยายามให้ข้อดีของ apt กับไฟล์ rpm แทน


4
apt-rpm ตายไปซักพักแล้ว (รุ่นล่าสุดกว่า1½ปีที่แล้ว) ตอนนี้และคนส่วนใหญ่ย้ายไปใช้ยำ ยำตัวเองให้ค่อนข้างมากของคุณสมบัติที่ดีที่โดดเด่นของการให้บริการที่ฉลาด .. ก
rasjani

1
ฉันไม่เชื่อว่าบรรจุภัณฑ์ของ Debian ดีกว่าของ Redhat ในปัจจุบัน มันเคยเป็นที่ Debian มีระบบการปรับปรุงที่ดีกว่าแต่ก็ดูเหมือนจะไม่เป็นจริงอีกต่อไป ยำได้ดีมาก ยังคงช้าเมื่อเทียบกับสมาร์ทแต่สามารถจัดการได้มาก
niXar

1
ทั้งหมดที่ฉันรู้คือครั้งสุดท้ายที่ฉันทำงานกับ CentOS พวกเรามีแนวโน้มที่จะเข้าสู่นรกพึ่งพาได้มากขึ้นและการเปลี่ยนไปใช้ apt-rpm แก้ไขปัญหาส่วนใหญ่เหล่านั้นได้
Paul Tomblin

1
บรรจุภัณฑ์ RPM ของ Redhat ทนทุกข์ทรมานจาก EDS (กลุ่มพึ่งพามาก) นี่ไม่ใช่คำอธิบายเกี่ยวกับ RPM แต่เป็น Redhat ยำเป็นสำเนาที่ดีของ apt-get plus apt-search และนำความสามารถในการใช้งานไปยังโลกที่ลึกลับกว่าก่อนหน้าของการเรียกใช้คำสั่ง RPM
kmarsh

3
จริงๆแล้วรูปแบบแพคเกจ. deb และ. rpm นั้นเกี่ยวกับแม้กระทั่งในทางเทคนิค (แต่ IMO .deb นั้นมีการจัดการการพึ่งพาที่ดีกว่า apt-get คือสิ่งที่เปล่งประกายในระดับเทคโนโลยี แต่สิ่งที่ทำให้แพ็คเกจของเดเบียนโดดเด่นจริงๆคือชุดนโยบายนักพัฒนาซอฟต์แวร์ที่กำหนดไว้อย่างดีซึ่งกำหนดมาตรฐานที่แพ็คเกจต้องปฏิบัติตาม แพคเกจ ubuntu สืบทอดว่าในระดับใหญ่และ ubuntu ยังสืบทอดยังสืบทอดวัฒนธรรมของนักพัฒนาที่ไปกับมัน
cas



2

ฉันคิดว่า cletus, Wayne และ iny ตอบคำถามนี้ได้ดี ฉันต้องการที่จะเพิ่มที่จริงมันไม่ใช่เรื่องใหญ่ ฉันทำงานในสภาพแวดล้อมแบบผสมที่เรามี Gentoo (พอร์เทจ), SUSE (rpm / zypper) และ OpenBSD (แพ็คเกจและพอร์ต) การติดตั้งแพคเกจใด ๆ ของพวกเขานั้นไม่ใช่เรื่องยากและฉันก็ไม่สนใจว่าจะใช้รูปแบบใด

จากมุมมองของซอฟต์แวร์บรรจุภัณฑ์ก็ไม่ยากเกินไป ไม่ว่าจะเป็น Gentoo, เครื่องกลั่นที่ใช้ RPM หรือเครื่องชงที่ใช้เด็มมันเป็นเพียงการเพิ่มสูตรการสร้างซอฟต์แวร์และเพิ่มข้อมูลเมตาเท่านั้น ให้ระบบการสร้างสิ่งที่คุณพยายามทำแพคเกจนั้นไม่ได้บ้าอย่างสมบูรณ์โดยปกติจะใช้เวลามากกว่าการเขียนเชลล์สคริปต์ที่ให้เกียรติเพื่อสร้างแพ็คเกจ


1

มีไบนารีที่รวบรวมไว้ในลูก tar เสมอ .... ;-)


1
AKA "Slackware"
พอลทอมบลิน

น่าเสียดายที่มีปัญหากับไบนารีที่คอมไพล์แบบสแตติกที่ต้องการโหลดไลบรารีระบบตอนรันไทม์ (โดยเฉพาะ nsswitch)
pjc50

1

ไม่มีนิยามของอินเตอร์เฟสไบนารีมาตรฐานสำหรับ "Linux" เนื่องจากเป็นเพียงเคอร์เนล Odds มีสแต็กซอฟต์แวร์ของคุณจะต้องเชื่อมต่อกับมากกว่าเคอร์เนลของคุณนำเสนอความท้าทายโดยเฉพาะอย่างยิ่งในการรักษา ABI มาตรฐานระหว่างต้นไม้ต้นกำเนิดนับร้อยที่แตกต่างกัน

ในหัวข้อของเครื่องมือบรรจุภัณฑ์ที่ดีฉันชอบ Debian GNU / Linux สำหรับรูปแบบบรรจุภัณฑ์ไบนารีที่ยอดเยี่ยม ตอบสนองความต้องการของฉัน 90% สำหรับเครื่องมือและแอปพลิเคชันมาตรฐาน ส่วนที่เหลืออีก 10% ถูกสร้างขึ้นจากแหล่งที่มาเนื่องจากการรวมขององค์ประกอบที่ไม่ฟรีหรือพึ่งพาห้องสมุดที่ใช้ร่วมกัน buggy เมื่อต้องการปรับใช้แอปพลิเคชันเหล่านั้นฉันจะสร้างไบนารีที่กำหนดเองสำหรับกลุ่มการผลิต


1

ในการรับบิลด์เพียงครั้งเดียวให้เรียกใช้รูปแบบแพคเกจที่ใดก็ได้โดยไม่บังคับให้ทุกคนใช้การแจกจ่ายแบบเดียวกันคุณต้องใช้ฟีเจอร์สำคัญสองอย่าง:

  • การตั้งชื่อแพคเกจที่ไม่ซ้ำกันทั่วโลกเพื่อให้คนสองคน / การกระจายไม่สามารถสร้างแพคเกจที่แตกต่างกันอย่างอิสระด้วยชื่อเดียวกัน

  • ความสามารถในการขนานติดตั้งไลบรารีเวอร์ชันต่าง ๆ เมื่อแพ็คเกจมีข้อกำหนดที่ขัดแย้งกัน การกระจายสามารถตัดสินใจว่าจะใช้ไลบรารี่ใดในแต่ละไลบรารี่และบังคับให้แพ็คเกจทั้งหมดใช้เวอร์ชันนั้น ระบบที่ทำงานข้ามการแจกแจงต้องยืดหยุ่นได้มากกว่า

Zero Installมีคุณสมบัติทั้งสองอย่างนี้:

  • ชื่อคือ URIs (เช่นhttp://rox.sourceforge.net/2005/interfaces/ROX-Filer ) เฉพาะเจ้าของโดเมนเท่านั้นที่สามารถสร้างแพ็คเกจภายในเนมสเปซนั้นได้ตามค่าเริ่มต้น

  • แต่ละเวอร์ชันของแต่ละแพ็คเกจจะอยู่ในไดเรกทอรีของตัวเอง แต่ละแอปพลิเคชันเห็นเฉพาะไลบรารีที่ต้องการด้วยรุ่นที่เข้ากันได้

ตัวอย่างเช่นแอปพลิเคชันแก้ไขขึ้นอยู่กับ Python <3 ดังนี้:

<command name="run" path="Edit/AppRun">
  <runner interface="http://repo.roscidus.com/python/python">
    <version before="3"/>
  </runner>
</command>

ดูเพิ่มเติมที่: http://www.osnews.com/story/16956/Decentralised-Installation-Systems

[หมายเหตุ: ฉันเป็นผู้พัฒนา 0install]

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.