อินเทอร์เฟซ VPN เอนจิน GPL และตัวติดตั้ง: อะไรถูกแจกจ่าย?
ทำแผนที่ว่าอะไรถูกแจกจ่าย อะไรถูกแก้ไข และส่วนต่าง ๆ สื่อสารกันอย่างไร ก่อนตัดสินใจว่าข้อกำหนด GPL และ OpenSSL ใช้กับชุดอินเทอร์เฟซ VPN ของคุณอย่างไร
คำถามมาถึงในฐานะเรื่องสัญญาอนุญาต แต่คำตอบเริ่มด้วยการทำบัญชีรายการ อินเทอร์เฟซ VPN เอนจิน OpenVPN ที่มันขับเคลื่อน ไลบรารี TLS และตัวติดตั้งอาจมีชุดข้อกำหนดที่แตกต่างกันสี่ชุด และรูปลักษณ์ของผลิตภัณฑ์ไม่ได้บอกคุณเลยว่าไฟล์ใดเป็นของชุดใด เมื่อไล่ดู artefact ตามลำดับที่แจกจ่าย คำถามทางกฎหมายก็จะแคบลงมากเมื่อคุณส่งต่อให้ผู้ที่มีคุณสมบัติตอบได้ แต่ละขั้นตอนทำให้แคบลงอีก นั่นคืออะไรถูกแจกจ่าย อะไรถูกแก้ไข และส่วนต่าง ๆ สื่อสารกันอย่างไร
เริ่มจากสิ่งที่ตัวติดตั้งวางลงบนดิสก์
ใช้ตัวติดตั้งหรือแพ็กเกจที่เผยแพร่แล้ว ไม่ใช่สำเนาระหว่างพัฒนา และเขียนรายการทุกไฟล์ที่มันวางบนเครื่องที่สะอาด บันทึกเวอร์ชันของอินเทอร์เฟซ เอนจิน และไลบรารี TLS พร้อมระบุว่าเอนจินเป็นไฟล์ปฏิบัติการแยกต่างหากหรือเป็นไลบรารีที่โหลดเข้าไปในโปรเซสเดียวกัน
ข้อเท็จจริงสุดท้ายนี้กำหนดทุกอย่างที่ตามมา ไฟล์ปฏิบัติการแยกที่เริ่มผ่านซ็อกเก็ตทำให้เกิดคำถามต่างจากโค้ดที่คอมไพล์เป็นไบนารีเดียว และตัวติดตั้งที่เพียงวางทั้งสองไว้ข้างกันไม่ได้ชี้ขาดเรื่องนี้ในทางใดทางหนึ่ง การรวมชุดเป็นการตัดสินใจเรื่องแพ็กเกจ ส่วนความสัมพันธ์ระหว่างโปรแกรมเป็นการตัดสินใจเชิงสถาปัตยกรรม
เขียนรายการพร้อมเวอร์ชันกำกับไว้ เพราะข้อกำหนดแตกต่างกันระหว่างรุ่นหลัก
dpkg -L openvpn | head -n 40
openssl version -aแยกอินเทอร์เฟซออกจากเอนจิน
ไฟล์คัดลอกของ OpenVPN ระบุ GPL เวอร์ชัน 2 และบันทึกข้อยกเว้นการเชื่อมโยงสำหรับ OpenSSL ซึ่งเป็นสิทธิ์เฉพาะที่มีขอบเขตชัดเจน ไม่ใช่สัญญาอนุญาตทั่วไปให้ผสมข้อกำหนด
เก็บข้อความสัญญาอนุญาตที่แจกจ่ายพร้อมบิลด์ของคุณ ไม่ใช่ฉบับที่อยู่บนเว็บไซต์โครงการวันนี้ การเผยแพร่ที่ปักหมุดสาขาเก่าจะพาเอกสารของสาขานั้นมาด้วย ภาพหน้าจอของหน้า repository ไม่ใช่สิ่งทดแทน เพราะไฟล์ที่คุณต้องการคือไฟล์ที่อยู่ภายใน artefact เก็บมันไว้ข้างตัวติดตั้งเพื่อให้แพ็กเกจสมบูรณ์
จากนั้นอธิบายการผสานรวมอย่างตรงไปตรงมา อินเทอร์เฟซเริ่มเอนจินเป็นโปรเซสลูกและพูดโพรโทคอลข้อความ หรือเชื่อมโยงไลบรารีและแลกเปลี่ยนโครงสร้างภายใน การจัดวางแบบหลังใกล้ชิดในแบบที่แบบแรกไม่ใช่ และความแตกต่างนี้คือสิ่งแรกที่ผู้ตรวจสอบจะถาม
บันทึกว่าไฟล์ใดที่คุณแก้ไข
โค้ดต้นฉบับที่แก้ไขเปลี่ยนการวิเคราะห์มากกว่ารายละเอียดแพ็กเกจใด ๆ ถ้าคุณแพตช์เอนจิน ตัวแพตช์เองเป็นงานที่สืบเนื่อง และหน้าที่ตกอยู่กับผู้ที่แจกจ่ายผลลัพธ์
บันทึกทุกแพตช์ วัตถุประสงค์ และว่าได้ส่งขึ้นต้นน้ำหรือไม่ เพราะแพตช์ที่ไม่เคยออกจาก repository ของคุณยังคงเป็นส่วนหนึ่งของสิ่งที่คุณแจกจ่ายหากคุณแจกจ่ายไบนารี
ไฟล์กำหนดค่า ธีม และคำแปลมักอยู่กับอินเทอร์เฟซ แต่คำแปลที่ฝังสตริงโค้ดต้นฉบับของเอนจินเป็นเครื่องเตือนเล็ก ๆ ว่าขอบเขตนั้นเป็นรายไฟล์ไม่ใช่รายโฟลเดอร์ เก็บความต่างระหว่างรุ่นต้นน้ำกับบิลด์ของคุณไว้ เพื่อให้คำตอบพร้อมเมื่อถูกขอแทนที่จะสร้างใหม่ภายหลัง ความต่างนั้นยังเป็น artefact ที่มีประโยชน์ที่สุดเมื่อผู้ตรวจสอบถามว่าอะไรเปลี่ยนไป
ตรวจสอบเวอร์ชัน OpenSSL แยกต่างหาก
OpenSSL 3.0 และใหม่กว่าถูกแจกจ่ายภายใต้ Apache License 2.0 ขณะที่รุ่นเก่ากว่ามีข้อกำหนด OpenSSL/SSLeay สิ่งเหล่านี้เป็นเอกสารต่างกันซึ่งมีหน้าที่ต่างกัน และเอนจินที่รวมชุดไว้อาจเชื่อมโยงกับฉบับใดก็ได้ที่ระบบบิลด์ของคุณพบ
ยืนยันเวอร์ชันที่แจกจ่ายจริง ไม่ใช่เวอร์ชันที่ระบุในสคริปต์บิลด์
การพึ่งพา OpenVPN ไม่ได้เปลี่ยนทุกการแก้ไข OpenSSL ให้เป็นโค้ด GPL และข้อยกเว้นการเชื่อมโยงไม่ได้ลบหน้าที่อื่นที่มาพร้อมกับการแจกจ่ายไลบรารีซ้ำ มองข้อยกเว้นเป็นเพียงข้อหนึ่งในการวิเคราะห์ที่กว้างกว่า และบันทึกประกาศของไลบรารี TLS เองพร้อมกับทุกสิ่งอื่น
ประกอบชุดหลักฐาน
ชุดนี้มีสี่ส่วน คือบัญชีไฟล์พร้อมเวอร์ชัน คำอธิบายการผสานรวม รายการแก้ไขพร้อมความต่าง และข้อความสัญญาอนุญาตตามที่แจกจ่าย เพิ่มไฟล์ประกาศที่คุณแจกจ่ายและสถานที่ที่เสนอโค้ดต้นฉบับ หากหน้าที่ของคุณกำหนดให้ต้องเสนอ
ให้ชุดนี้อยู่ภายใต้ผู้ดูแลเพียงคนเดียว เพื่อไม่ให้การเผยแพร่ใดออกไปโดยไม่มีชุดนี้
ไม่มีสิ่งใดในนี้ที่ชี้ขาดคำถามทางกฎหมาย และนั่นคือประเด็น มันให้ข้อเท็จจริงแก่ผู้ตรวจสอบที่มีคุณสมบัติ แทนที่จะเป็นบทสรุปที่ใครคนหนึ่งประกอบจากความจำ คำอธิบายการตลาดของผู้ขายไม่ใช่หลักฐานเกี่ยวกับสถาปัตยกรรมของพวกเขา และการคาดเดาของคุณเองก็ไม่ใช่หลักฐานเช่นกัน