ทำไมโปรแกรมไม่กระจายในรูปแบบที่คอมไพล์แล้ว?


32

แต่พวกเขาให้คำแนะนำเช่น

cd downloaded_program
./configure
make install

สิ่งนี้จะสร้างเอลฟ์ที่จำเป็นและอาจเป็นไฟล์. so บางไฟล์

ทำไมไม่วางไฟล์เหล่านั้นไว้ในไฟล์ zip เพื่อดาวน์โหลดเช่นเดียวกับแอพ windows? มีเหตุผลใดที่พวกเขาต้องรวบรวมโดยผู้ใช้?


18
นั่นคือวิธีการแจกจ่ายซอร์สโค้ด คุณติดแท็กด้วยอูบุนตู - คุณลองaptสิ่งนี้แล้วหรือยัง?
mikeserv

11
Ubuntu: โปรแกรมที่พบบ่อยที่สุด 40,000 โปรแกรม: $ sudo apt-get install [name]. ซอฟต์แวร์ที่หายากมากขึ้น: ซอฟต์แวร์บางตัวต้องสร้างจากแหล่งที่มาด้วย {cmake .. && make, ./configure && make, waf, scons เป็นต้น ~ 10 ตัวเลือกการสร้าง}
Knud Larsen

6
คุณมี Windows ©สามเวอร์ชันและ ~ 100 "Linux OS" เวอร์ชัน ไม่สามารถบำรุงรักษาและจัดเก็บได้มากกว่าโปรแกรมทั่วไป (40,000) โปรแกรม
Knud Larsen

35
คำถามนี้ผิด ซอฟต์แวร์ส่วนใหญ่มีการกระจายในรูปแบบไบนารีมักจะอยู่ใน.rpmหรือ.debหรือ.tgzแพคเกจ แหล่งที่มายังมีการกระจายสำหรับผู้ที่ต้องการรวบรวมด้วยตนเองหรือตรวจสอบหรือแก้ไขหรือบรรจุมันสำหรับ distros หนึ่งหรือมากกว่า ไม่มีใครใช้.zipสำหรับการแจกจ่ายไบนารีบน linux เนื่องจากไฟล์. zip ไม่สนับสนุนข้อมูลที่จำเป็นเช่นผู้ใช้กลุ่มและการอนุญาตสำหรับไฟล์ที่พวกเขามี
cas

2
ฉันยังไม่จำเป็นต้องรวบรวมโปรแกรม Linux ใด ๆ ที่ฉันต้องการเรียกใช้ ผู้บริหารสามารถใช้ได้เสมอ ... จนถึงตอนนี้
user2338816

คำตอบ:


34

ลองวิเคราะห์ปัจจัย ...

วิเคราะห์ :

การลดค่าใช้จ่ายตามรูปแบบ : มีปัญหาบางอย่างที่เกิดขึ้นในสภาพแวดล้อมที่ผู้พัฒนากำลังสร้างและบำรุงรักษาแอพพลิเคชั่นเฉพาะของสถาปัตยกรรมที่หลากหลาย:

  • ต้องใช้ซอร์สโค้ดที่แตกต่างกันสำหรับตัวแปรที่แตกต่างกัน - ระบบปฏิบัติการที่ใช้ UNIX ที่แตกต่างกันอาจใช้ฟังก์ชั่นที่แตกต่างกันในการใช้งานเดียวกัน (เช่น strchr (3) กับ index (3)) เช่นเดียวกันคุณอาจจำเป็นต้องรวมไฟล์ส่วนหัวที่แตกต่างกันสำหรับตัวแปรที่แตกต่างกัน (ตัวอย่างเช่น string.h vs. strings.h)

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

  • บิวด์สำหรับชุดรูปแบบที่แตกต่างกันจะต้องแยกกัน - เนื่องจากมีทรีของซอร์สเดียวจึงต้องใช้ความระมัดระวังเพื่อให้แน่ใจว่าโมดูลวัตถุและไฟล์ที่เรียกใช้งานได้สำหรับสถาปัตยกรรมหนึ่งจะไม่สับสนกับโครงสร้างอื่น ๆ ตัวอย่างเช่นตัวแก้ไขลิงก์ต้องไม่พยายามสร้างไฟล์ปฏิบัติการ IRIX –5 โดยใช้โมดูลวัตถุที่สร้างขึ้นสำหรับ SunOS – 4

  • ระบบปฏิบัติการทุกระบบมีรูปแบบการจัดการการเชื่อมโยงของตัวเองและต้องจัดเตรียมไฟล์ ELF (ปฏิบัติการและการเชื่อมโยงรูปแบบ) ตามที่ต้องการ

  • คอมไพเลอร์จะสร้างบิลด์ที่เป็นลำดับของคำสั่งและสถาปัตยกรรมที่แตกต่างหมายถึงชุดคำสั่งต่าง ๆ ( การเปรียบเทียบสถาปัตยกรรมชุดคำสั่ง ) ดังนั้นผลลัพธ์ของคอมไพเลอร์จึงแตกต่างกันไปในแต่ละสถาปัตยกรรม (เช่น x86, x86-64, ARM, ARM64, IBM Power ISA, PowerPC, โมโตโรล่า 6800, MOS T 6502 และอื่น ๆ อีกมากมาย )

ความปลอดภัย :

  • หากคุณดาวน์โหลดไบนารี่คุณไม่สามารถแน่ใจได้ว่ามันเป็นอย่างที่มันบอกว่ามันทำ แต่คุณสามารถลองตรวจสอบซอร์สโค้ดและใช้ไบนารีที่คอมไพล์ด้วยตนเองในระบบของคุณ แม้จะมีสิ่งนี้ผู้ใช้Techmagทำดีจุดในความคิดเห็นของเขาการตรวจสอบรหัสต้องมี coders ที่มีความรู้และมีความสามารถในการประเมินรหัสและไม่รับประกันความปลอดภัย

ตลาด : ในส่วนนี้มีปัจจัยหลายอย่าง แต่ฉันจะพยายามดำเนินการต่อ:

  • ไม่ใช่ทุก บริษัท ที่มีเป้าหมายเพื่อเข้าถึงแพลตฟอร์มทั้งหมด แต่ขึ้นอยู่กับตลาดและความนิยมของแพลตฟอร์มและสิ่งที่พวกเขาต้องการขาย

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

สรุป :

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


1
ฉันคิดว่าคำตอบนี้จะได้รับการปรับปรุงให้ดีขึ้นโดยเพิ่มความชัดเจนเกี่ยวกับความแตกต่างของโมเดลโปรเซสเซอร์ - และประมาณ 10 ปีที่แล้วแต่ละรุ่นของ Unix จะมีของตัวเอง ลินุกซ์ไม่ได้มีอิทธิพลอย่างแพร่หลายในทุกวันนี้
Sobrique

@Sobrique: หรือพูดถึงความแตกต่างของโมเดลโปรเซสเซอร์ต่อ se - 10 ปีที่แล้วมีมากกว่า 2 ประเภทที่เรามีในปัจจุบันและ Linux ใช้งานเกือบทั้งหมด (ฉันใช้ Linux บน PowerPC) ปัจจุบันยังมีความเกี่ยวข้องบางส่วนกับ x86, AMD64 (หรือที่เรียกว่า x86-64) และ ARM MIPS ยังคงเป็นที่นิยมในทุกวันนี้ในหมู่ผู้ที่สามารถผลิตชิปของตัวเองเพราะมันปลอดสิทธิบัตรโดยสมบูรณ์ในตอนนี้
slebetman

ขออภัยในความล่าช้า! ขอบคุณทั้งคู่! ฉันได้เพิ่มการอ้างอิงบางส่วนไปยังสถาปัตยกรรมซีพียูฉันยังเพิ่มลิงค์ไปยังรายการเปรียบเทียบ ฉันไม่ต้องการคำตอบที่ยิ่งใหญ่ แต่ใช่มันมีความเกี่ยวข้องมาก!
Facundo Victor

1
ความคิดเห็นด้านความปลอดภัยหมายความว่าผู้อ่าน / ผู้ติดตั้งรู้วิธีการอ่านและทำความเข้าใจรหัส เนื่องจากช่องโหว่ของกระสุนรอดชีวิตมาหลายสิบปีโดยที่ไม่ได้สังเกตเห็นฉันขอแนะนำด้วยความเคารพว่าเป็นความเชื่อที่ผิด มันอนุญาตให้โค้ดที่มีความรู้และมีความสามารถในการประเมินโค้ดใช่ แต่มันไม่ได้ยับยั้งความปลอดภัยที่แท้จริงเท่าที่โฆษณาไว้ มันอาจมีผลตรงกันข้าม รัฐและแฮ็กเกอร์ที่ได้รับการสนับสนุนกองทุนอาชญากรรมมีแนวโน้มที่จะสนับสนุนรหัสสำหรับคฤหาสน์ของห้องสมุดโอเพนซอร์ซ / โครงการทุกวันนี้โดยหวังว่าจะมีการสร้างการเปิด
กระสุนปืน

คุณพูดถูก! ฉันแก้ไขคำตอบเพื่อสะท้อนว่า ฉันพยายามที่จะไม่สูญเสียการมุ่งเน้นไปที่วัตถุประสงค์หลักของคำตอบ ขอบคุณ Techmag!
Facundo Victor

10

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

การแจกจ่ายซอฟต์แวร์เป็นซอร์สโค้ดยังช่วยให้สามารถตรวจสอบได้อย่างอิสระว่าซอฟต์แวร์ทำในสิ่งที่อ้างสิทธิ์และไม่ทำสิ่งที่น่ารังเกียจแทนหรือเช่นกัน - ซึ่งแม้จะลดระดับความไว้วางใจที่ผู้ใช้ต้องมีในผู้สร้าง


8

ก่อนคำถามของคุณจะขึ้นอยู่กับหลักฐานที่มีข้อบกพร่อง โปรแกรมถูกแจกจ่ายในรูปแบบที่คอมไพล์แล้ว!

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

โดยค่าเริ่มต้นตัวจัดการแพคเกจจะเสนอแพ็คเกจที่คุณทำโดยผู้ดูแลการแจกจ่าย นอกจากนี้คุณยังสามารถค้นหาแพ็คเกจของบุคคลที่สาม Ubuntu เสนอPPAเป็นวิธีมาตรฐานสำหรับบุคคลที่สามในการเสนอแพ็คเกจ

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

เมื่อซอฟต์แวร์ไม่ได้รับการบรรจุหีบห่อสำหรับการแจกจ่ายซอฟต์แวร์มักจะแจกจ่ายในรูปแบบของแหล่งที่มาแทนที่จะเป็นรูปแบบไบนารี มีสาเหตุหลักสองประการที่ทำให้สิ่งนี้เกิดขึ้นบ่อยครั้งในโลก Linux แต่ไม่ค่อยเกิดขึ้นในโลกของ Windows เหตุผลหนึ่งก็คือสัดส่วนของโปรแกรมโอเพ่นซอร์สบน Linux นั้นสูงกว่ามาก เห็นได้ชัดว่าหากซอร์สโค้ดของโปรแกรมไม่พร้อมใช้งานรูปแบบการกระจายแบบเดียวคือไบนารี อีกเหตุผลคือโลก Linux มีความหลากหลายมากกว่า จำเป็นต้องใช้ไบนารีที่ต่างกันสำหรับแต่ละรุ่นของไลบรารีที่เข้ากันไม่ได้ซึ่งมักหมายถึงไบนารีที่แตกต่างกันสำหรับแต่ละเวอร์ชันของการแจกจ่ายแต่ละครั้ง Windows“ แก้ไข” สิ่งนี้โดยให้ผู้แต่งแพ็คเกจแต่ละคนแจกจ่ายไลบรารีที่พวกเขาใช้พร้อมกับโปรแกรม (ผลที่ตามมา: คอมพิวเตอร์ของคุณเก็บสำเนาของแต่ละไลบรารีจำนวนมากหนึ่งชุดต่อโปรแกรมที่ใช้ถ้ามีการแก้ไขข้อบกพร่องในไลบรารี แต่ละโปรแกรมที่ใช้จะต้องมีการอัพเดท) และโดยการปล่อยเวอร์ชั่นใหม่ของระบบปฏิบัติการทุก ๆ สามปีหรือมากกว่านั้น ยูนิกซ์มีความหลากหลายมากขึ้นและมีการแก้ไขข้อผิดพลาดในเวลาที่เหมาะสมและแก้ไขปัญหาการกระจายห้องสมุดโดยการสร้างไบนารีที่แตกต่างกันสำหรับการแจกแจงที่แตกต่างกัน


5

Linux ทำงานบนแพลตฟอร์ม CPU มากกว่าหนึ่งแพลตฟอร์มเท่านั้น หากคุณแจกจ่ายไฟล์ ELF (หรือไฟล์ปฏิบัติการแบบอื่น) อาจเป็นไปได้ว่า Linux บางเวอร์ชันไม่สามารถเรียกใช้ซอฟต์แวร์ได้ ในจิตวิญญาณของการทำซอฟต์แวร์ที่มีอยู่อย่างกว้างขวางที่สุดเท่าที่จะทำได้โดยใช้ซอร์สโค้ดเป็นที่ต้องการ ตัวอย่างเช่น Linux ทำงานบน Sparc, Intel, AMD, ARM และโปรเซสเซอร์ประเภทอื่น ๆ

ตัวอย่างเช่นหากไฟล์ ELF กำหนดเป้าหมายเป็นโปรเซสเซอร์ของ Intel โดยเฉพาะแสดงว่าฮาร์ดแวร์ประเภทอื่นไม่สามารถเรียกใช้ซอฟต์แวร์ได้ ELF เป็นอิสระจากแพลตฟอร์ม แต่รหัสที่โฮสต์ต้องการจะสอดคล้องกับรหัสเครื่องของแพลตฟอร์ม คุณจะสังเกตเห็นว่าการกระจายมีแพคเกจที่คล้ายกันจำนวนเท่าใด (เช่น _386 และ _586 แพ็คเกจเมื่อสนับสนุนโปรเซสเซอร์ที่แตกต่างกัน) - คุณต้องติดตั้งไฟล์ ELF ที่ถูกต้องเพื่อให้ได้การดำเนินการที่ถูกต้อง

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


นี่คือเหตุผลที่คุณอาจใช้ Firefox 32 บิตเหมือนกับโปรแกรมอื่น ๆ ในระบบปฏิบัติการ Windows "64 บิต" ในขณะที่ 64 บิต Linux มักใช้แอปพลิเคชัน 64 บิต
mchid

5

เหตุผลดั้งเดิมในการเผยแพร่เนื่องจากแหล่งที่มาคือความหลากหลายของแพลตฟอร์ม ชุมชนลินุกซ์ยังคงใช้วิธีการนั้นต่อไปสำหรับเหตุผลใหม่และเหตุผลทางการเมืองบางส่วน

ซึ่งแตกต่างจากเช่น Windows, Linux ไม่เคยใส่ใจในอดีตที่จะรักษา ABI ใด ๆ (application binary interface) ที่มีเสถียรภาพในระยะเวลานาน - ทำให้มีความเป็นไปได้ที่จะคิดค้นสิ่งต่างๆเช่นรูปแบบที่ปฏิบัติการได้, API ไลบรารีและการสนับสนุนแพลตฟอร์มฮาร์ดแวร์ใหม่ ๆ สิ่งสำคัญ.

ระบบปฏิบัติการเชิงพาณิชย์บรรลุความเข้ากันได้ของแอปพลิเคชั่นระยะยาวโดยมีระเบียบวินัยมากเกี่ยวกับนวัตกรรม จำเป็นต้องเพิ่มฟีเจอร์อินเทอร์เฟซ / ซอฟต์แวร์ใหม่ในส่วนเพิ่มเติมเก่า - ต้องมีสองสิ่งที่ต้องดูแลและราคาของการเปลี่ยนแปลงอะไรหลังจากการเปิดตัวต้องได้รับการพิจารณาสูงมาก อีกทางหนึ่งคุณสามารถยอมรับความจริงของการล้าสมัยของแอพพลิเคชั่นที่วางแผนไว้พร้อมกับใครก็ตามที่เขียนซอฟต์แวร์สำหรับระบบปฏิบัติการของคุณ

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


4

ในหลายกรณี (อย่างน้อยในโลก * nix) ซอร์สโค้ดเป็นซอฟต์แวร์พกพาที่สุด มีแหล่งที่มารับประกันว่าซอฟต์แวร์ที่ใช้ร่วมกันจะทำงานบนทุกแพลตฟอร์มที่อาจสนับสนุน (ซึ่งในหลาย ๆ กรณีก็หมายถึง POSIX- สอดคล้อง) การปล่อยไบนารีจะรับประกันความเข้ากันได้กับแพลตฟอร์ม (ทั้งซอฟต์แวร์และฮาร์ดแวร์) ที่ไบนารีเหล่านั้นเปิดตัว

พิจารณาว่าใน windows ไบนารีเป็นรูปแบบที่สะดวกที่สุดและพกพาได้สำหรับการแบ่งปันซอฟต์แวร์ เนื่องจากการคอมไพล์ซอร์สไม่ได้เป็นส่วนหนึ่งของรูปแบบการกระจายซอฟต์แวร์ windows ปกติ Microsoft ได้ใช้ความพยายามอย่างมากในช่วงหลายปีที่ผ่านมาเพื่อให้แน่ใจว่าไบนารีทำงานได้กับระบบปฏิบัติการหลายเวอร์ชัน: http://www.joelonsoftware.com/articles/APIWar.html


5
Windows ขึ้นอยู่กับสถาปัตยกรรมพื้นฐานเช่นกัน แอพ Windows ที่เปิดใช้งาน ARM ไม่ทำงานบนแล็ปท็อป / เดสก์ท็อปทั่วไปเป็นต้น นั่นเป็นสาเหตุหลักที่ทำให้ Linux รองรับฮาร์ดแวร์ได้ดีกว่ามาก - เนื่องจากโค้ดที่เขียนเพื่อคอมไพล์บนแพลตฟอร์มใด ๆ ที่มีการนำลินุกซ์มาใช้ในขณะที่ Windows ขึ้นอยู่กับฮาร์ดแวร์ที่รู้จักที่มีอยู่
phyrfox

หากคุณสร้าง Windows / x86 คุณจะครอบคลุม 95% ของความเข้ากันได้แบบไบนารี นั่นเป็นสิ่งที่ดีงาม ในขณะที่ Linux / x86 เริ่มแพร่หลายมากขึ้นเรามาจากโลกที่คุณมีชื่อใหญ่ ๆ มากมายด้วยสถาปัตยกรรมโปรเซสเซอร์พิเศษของพวกเขาเองและตัวแปร Unix - นั่นไม่ใช่ไบนารีที่เข้ากันได้
Sobrique

@Sobrique คุณคิดว่า 95% มาจากไหน ครั้งล่าสุดที่ฉันดูมีซีพียู 4 ARM สำหรับทุกๆ 1 x86 ไม่กี่ปีมานี้ก่อนที่ทุกคนจะเริ่มใช้โทรศัพท์สมาร์ทโฟนกับโปรเซสเซอร์ ARM ดังนั้นถ้าเราสมมติว่าไม่มีโปรเซสเซอร์อื่น ๆ นั่นคือ 20%
ctrl-alt-delor

3

ซอฟต์แวร์ Linux ส่วนใหญ่เป็นซอฟต์แวร์ฟรี โดยการแจกจ่ายซอร์สโค้ดด้วยคำสั่งที่รวบรวมมากกว่าไบนารีคุณมีโอกาสที่จะตรวจสอบหรือแก้ไขซอร์สโค้ดก่อนที่จะรวบรวม ด้วยวิธีนี้คุณสามารถมั่นใจได้อย่างแท้จริงว่าโปรแกรมทำอะไรและไม่เป็นอันตราย


0

เหตุผลหลักที่ฉันเองไม่ชอบเพียงแค่รับโปรแกรมที่เรียกใช้งานได้เพราะฉันชอบที่จะตรวจสอบสิ่งที่ซอร์สโค้ดกำลังทำอยู่จริงๆ (ส่วนใหญ่เป็นเพราะฉันชอบดูรหัสของผู้อื่น) แต่ฉันรู้จักคนอื่นหลายคน ใครยังตรวจสอบซอร์สโค้ดเพื่อหาโค้ดที่เป็นอันตราย


0

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

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


0

นอกเหนือจากความจริงที่ว่ามีระบบยูนิกซ์จำนวนมากที่ทำงานบนแพลตฟอร์มที่แตกต่างกันเพียงพิจารณาปัญหาที่ซอฟต์แวร์ Windows ประสบจาก modal การแจกจ่ายนี้แม้ว่าพวกเขาจะต้องกังวลเกี่ยวกับ windows รุ่นเดียวเท่านั้นและแพลตฟอร์มหนึ่ง (พีซี) )

แม้จะมีเพียงพีซีที่ต้องกังวลยังมีสถาปัตยกรรมสองแห่ง: 32 บิตและ 64 บิต หากคุณสังเกตเห็นว่าซอฟต์แวร์ windows ส่วนใหญ่จะไม่สนใจซอฟต์แวร์ 64 บิตและจัดส่งซอฟต์แวร์ 32 บิตเท่านั้นโดยปล่อยให้คุณใช้ซอฟต์แวร์ที่เหมาะสมที่สุดหากคุณมีระบบ 64 บิต จากนั้นก็มีห้องสมุด ผู้จำหน่ายซอฟต์แวร์รายหนึ่งไม่ต้องการให้คุณได้รับข้อผิดพลาดแปลก ๆ ที่พยายามเรียกใช้โปรแกรมของพวกเขาหากคุณไม่ได้ติดตั้งไลบรารี่ที่เหมาะสมดังนั้นพวกเขาจึงรวมไลบรารี่กับโปรแกรมของพวกเขา (ทำให้การดาวน์โหลดใหญ่ขึ้นแม้ว่าคุณจะมีไลบรารี่นี้แล้ว ) โปรแกรมที่สองทำสิ่งเดียวกัน แต่ใช้ไลบรารีเวอร์ชันอื่น ในกรณีที่ดีที่สุดโปรแกรม B มีไลบรารี่เวอร์ชันใหม่กว่าที่เข้ากันได้แบบย้อนหลังดังนั้นหากคุณติดตั้งโปรแกรม B หลังจากโปรแกรม A สิ่งต่าง ๆ ทำงานได้ แต่การติดตั้งในลำดับกลับกันจะทำให้คุณมีไลบรารีเวอร์ชันเก่ากว่า บ่อยครั้งที่ผู้ค้าห้องสมุดทำการเปลี่ยนแปลงที่ไม่เข้ากันได้ย้อนหลังและไม่ต้องเปลี่ยนชื่อของไลบรารีดังนั้นไม่ว่าคุณจะติดตั้งโปรแกรมสองโปรแกรมในลำดับใดก็ตามโปรแกรมแรกจะหยุดทำงาน สิ่งนี้เรียกว่า "dll hell"

น่าเศร้าที่จะหลีกเลี่ยงปัญหานี้ซอฟต์แวร์ windows ส่วนใหญ่ใช้วิธีจัดส่งไลบรารี่ทั้งหมดของพวกเขาในไดเรกทอรีโปรแกรมของตนเองแทนที่จะเป็นไดเรกทอรีที่ใช้ร่วมกันดังนั้นแต่ละโปรแกรมจึงมีห้องสมุดส่วนตัวของตัวเองทั้งหมดและจะไม่แบ่งปันซึ่งกันและกัน จุดของ dlls ในสถานที่แรกและคุณท้ายใช้ ram มากขึ้นและพื้นที่ดิสก์และเวลาในการดาวน์โหลดทั้งหมดของไลบรารีที่ซ้ำกัน

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

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