GPL ทำงานอย่างไรเกี่ยวกับภาษาเช่น Dart ที่รวบรวมเป็นภาษาอื่น ๆ ?


11

เว็บเบราเซอร์ไม่รองรับภาษา Dart ของ Google นอกเหนือจาก Chromium รุ่นพิเศษที่รู้จักกันในชื่อ Dartium ในการใช้ Dart สำหรับรหัสการผลิตคุณจะต้องเรียกใช้มันผ่านตัวรวบรวม / ตัวแปล / ตัวแปล JavaScript จากนั้นใช้ JavaScript เอาท์พุทในเว็บแอปพลิเคชันของคุณ

เนื่องจาก JavaScript เป็นภาษาที่ตีความทุกคนที่ได้รับ "binary" (Aka ไฟล์. js) จึงได้รับซอร์สโค้ดด้วย

ตอนนี้สัญญาอนุญาตสาธารณะทั่วไปของ GNU v3.0 ระบุว่า

"" ซอร์สโค้ด "สำหรับงานหมายถึงรูปแบบที่ต้องการของงานเพื่อทำการแก้ไข"

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


3
ฉันจะไม่เรียกไฟล์. js ว่า "ซอร์สโค้ด" มากกว่า js ที่ยุ่งเหยิงคือ "ซอร์สโค้ด" แน่นอนว่ามันยังคงถูกตีความ แต่ไม่ว่าจะเป็นซอร์สโค้ดก็ตาม มันเป็นเหมือนการส่งออก HTML ของสคริปต์ PHP ไม่แน่ใจว่ามันทำงานได้ดีอย่างไร
Ben Brocka

เมื่อคุณพูดว่า "Production Code" คุณหมายถึง "Productized" หรือไม่ การใช้ภายในไม่จำเป็นต้องมีการปล่อยซอร์สโค้ด คุณกำลังใช้รหัส Dart ตามรหัสลิขสิทธิ์ GPL (หรืออื่น ๆ ) ของบุคคลอื่นหรือไม่หรือเป็นรหัสต้นฉบับทั้งหมดที่คุณพัฒนาขึ้นหรือไม่ คำตอบนั้นขึ้นอยู่กับรายละเอียดเหล่านั้น
พอล

1
คุณไม่ต้องให้ซอร์สโค้ดแก่ผู้เยี่ยมชมหากคุณเรียกใช้แอปพลิเคชัน GPL คุณจะต้องให้รหัสแหล่งที่มาหากคุณเผยแพร่แอปพลิเคชัน (ถ้ามันเป็น AGPL คุณก็ต้องให้แหล่งที่มา: gnu.org/licenses/why-affero-gpl.html )
JCasso

1
สมมติว่าแอปพลิเคชันทำงานบนเว็บสาธารณะที่ขัดข้องแล้วรหัสไม่ถูก "แจกจ่าย" แก่ผู้เข้าชมทุกคนหรือไม่ แม้ว่าเบราว์เซอร์จะถูกดาวน์โหลดโดยเฉพาะไปยังตำแหน่งชั่วคราวก่อนที่จะถูกดำเนินการ
Peter-W

@ Peter-W ฉันจะบอกว่าการโต้แย้งเป็นเรื่องทางเทคนิคและไม่ชัดเจน เบราว์เซอร์ที่ดาวน์โหลด javascript นั้นเป็นรายละเอียดของการใช้งาน ผู้ใช้ส่วนใหญ่ไม่ทราบว่าพวกเขาได้รับ "แจกจ่าย" อะไรในขณะที่ผู้ใช้ส่วนใหญ่จะเข้าใจการได้รับซีดีหรือดาวน์โหลดสิ่งต่าง ๆ นับเป็น "การแจกจ่าย" ในกรณีนี้กลไกการดำเนินการคือการแจกจ่าย (ไปยังเบราว์เซอร์และชั่วคราว) ซึ่งทำให้ปัญหาทั้งหมดไม่ชัดเจนสำหรับฉัน แก้ไข : นอกจากนี้ในวิธีที่รหัส js คือ "bytecode" จากมุมมองของ Coder Dart ใช่ไหม?
Andres F.

คำตอบ:


9

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

ฉันคิดว่าวิธีที่ง่ายที่สุดในการปฏิบัติตาม GPL ในกรณีนี้คือการใช้ตัวเลือก d เพื่อแจกจ่ายแหล่งที่มา

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

เป็นหลักคุณทำเช่นนี้เมื่อคุณรวมไฟล์ JS ในหน้าของคุณ

<script src="file.js" /><!-- source at http://example.com/path/to/modified/source/file.dart -->

2
โปรดอ่านคำตอบของฉัน สังเกตคำพูดเกี่ยวกับ GPL ที่ไม่ต้องการให้ปล่อยต้นฉบับสร้างเฉพาะในกรณีนี้ ในกรณีนี้ GPL ไม่ต้องการให้เขาแจกจ่ายดังนั้นกลไกการแจกแจงจึงไม่สำคัญ เช่นเดียวกับที่ฉันพูดใบอนุญาตอื่นมีกฎแตกต่าง
เปาโล

1
ฉันคิดว่า GCC เป็นตัวอย่าง เนื่องจาก GCC เป็น GPL และฉันใช้เพื่อคอมไพล์โปรแกรม "แหล่งที่มาปิด" ดังนั้นฉันจึงต้องปล่อยแหล่งที่มาดั้งเดิมหรือไม่ ฉันเชื่อว่าสิ่งนี้จะเป็นจริงสำหรับ GPL "compiler" ใด ๆ
Paul

3
คำตอบนี้ผิด แม้ว่ารหัส Dart จะได้รับลิขสิทธิ์ภายใต้ GPL คุณไม่จำเป็นต้องระบุรหัสแหล่งที่มาของ Dart จนกว่าคุณจะเผยแพร่แอปพลิเคชัน การเรียกใช้แอปพลิเคชัน GPL บนเซิร์ฟเวอร์ไม่จำเป็นต้องระบุซอร์สโค้ดสำหรับแอปพลิเคชันนั้น นั่นคือเหตุผลที่เป็นอีกหนึ่งใบอนุญาตชื่อAGPL เพื่อวัตถุประสงค์เฉพาะนั้น
JCasso

2
@JCasso ที่จะเป็นจริงหากรหัสกำลังทำงานอยู่บนเซิร์ฟเวอร์ แต่ในกรณีของ Dart รหัสวัตถุที่เป็นผลลัพธ์คือ JavaScript ซึ่งกระจายไปยังลูกค้าในกรณีส่วนใหญ่ เห็นได้ชัดว่าถ้าคุณทำสิ่งที่แปลกจริง ๆ เช่นการใช้งานเซิร์ฟเวอร์ฝั่ง JavaScript ก็จะไม่นับเป็นการกระจาย
Dirk Holsopple

3
@JCasso ที่ใช้กับรหัสฝั่งเซิร์ฟเวอร์เท่านั้น จากหน้าเดียวกัน: JavaScript ของ Drupal รวมถึงสำเนาของ jQuery ที่มาพร้อมกับ Drupal นั้นอยู่ภายใต้ GPL เช่นกันดังนั้น Javascript ใด ๆ ที่ทำงานกับ JavaScript ของ Drupal ในเบราว์เซอร์จะต้องอยู่ภายใต้ GPL หรือ GPL ที่รองรับ
Dirk Holsopple

2

ก่อนอื่นเรากำลังพูดถึง GPL ไม่ใช่ AGPL

หากคุณไม่ได้แจกจ่ายจีพีแอพลิเคชันถ้าคุณทำงานบนเซิร์ฟเวอร์คุณไม่ต้องให้รหัสที่มา มี AGPL สำหรับสิ่งนั้น GPL นั้นเกี่ยวกับการกระจาย

จากคำถามที่พบบ่อยของ Drupal:

ฉันต้องให้รหัสสำหรับเว็บไซต์ของฉันกับใครก็ตามที่เยี่ยมชมเว็บไซต์หรือไม่

ไม่ GPL ไม่พิจารณาที่จะดูเว็บไซต์เพื่อนับว่าเป็น "การกระจาย" ดังนั้นคุณไม่จำเป็นต้องแชร์รหัสที่ทำงานบนเซิร์ฟเวอร์ของคุณ http: //drupal.org/licensing/faq/#q6

โปรดทราบว่า Drupal ได้รับอนุญาตภายใต้ GPL และมีไฟล์ js (มาก)

จาก GNU:

วัตถุประสงค์ของ GNU Affero GPL คือการป้องกันปัญหาที่ส่งผลกระทบต่อผู้พัฒนาโปรแกรมฟรีที่มักใช้กับเซิร์ฟเวอร์

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

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

การใช้ GNU Affero GPL หลีกเลี่ยงผลลัพธ์นั้น หาก D ใช้งานเวอร์ชันของเขาบนเซิร์ฟเวอร์ที่ทุกคนสามารถใช้ได้คุณก็สามารถใช้ได้เช่นกัน สมมติว่าเขาได้ปฏิบัติตามข้อกำหนดสิทธิการใช้งานเพื่อให้ผู้ใช้เซิร์ฟเวอร์ดาวน์โหลดซอร์สโค้ดของเวอร์ชันของคุณคุณสามารถทำได้และจากนั้นคุณสามารถรวมการเปลี่ยนแปลงในเวอร์ชันของคุณ (หากเขาไม่ได้ติดตามคุณมีทนายของคุณบ่นกับเขา) ที่มา: http://www.gnu.org/licenses/why-affero-gpl.html


2
แต่การเห็นเช่นนี้คือ Dart ซึ่งถูกคอมไพล์ไปยัง Javascript และจากนั้นดำเนินการเหมือนกับบน cilent สิ่งนี้มีผลบังคับใช้หรือไม่?
Winston Ewert

1
GPL มีความชัดเจนเกี่ยวกับเรื่องนั้น ถ้าฉันให้อูบุนตูซีดีของคุณฉันต้องให้วิธีการรับซอร์สโค้ด ถ้าฉันใส่ ubuntu.iso ไปยัง fileserver ฉันก็ต้องเตรียมลิงค์ดาวน์โหลด (หรืออะไรทำนองนั้น) นี่เรียกว่าการแจกแจง หากคุณเผยแพร่คุณจะต้องให้รหัสแหล่งที่มา แต่การมีแอปออนไลน์ (บนเซิร์ฟเวอร์) จะไม่ถูกนับว่า "การกระจาย"
JCasso

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

2
อันที่จริงฉันคิดว่ามันสำคัญมากสำหรับ CPU ที่ใช้ประมวลผล หากฉันเรียกใช้รหัสของคุณบน CPU จากนั้นคุณก็ต้องแจกจ่ายรหัสของคุณให้ฉัน สำหรับทุกเจตนารมณ์และจุดประสงค์มันเหมือนกับว่าฉันดาวน์โหลดโปรแกรมและเรียกใช้ คำถามที่ได้รับการกล่าวถึงมาก่อน: stackoverflow.com/questions/1239470/... , programmers.stackexchange.com/questions/62869/...
Winston Ewert

2
ดูที่หน้า AGPL ที่คุณเชื่อมโยงด้วย มันกล่าวถึงรหัสที่รันบนเซิร์ฟเวอร์อย่างชัดเจนไม่ใช่โค้ดที่เรียกใช้บนไคลเอ็นต์ หากผู้เขียนคิดว่า GPL ไม่ได้ใช้กับโค้ดที่เรียกใช้จาวาสคริปต์ของคุณเขาจะกล่าวถึงในการสนทนาของเขา
Winston Ewert

1

โดยทั่วไปแล้วมันขึ้นอยู่กับใบอนุญาตจริงๆ ในกรณีของคุณ Dart เป็นตัวอย่างที่ไม่ดีเนื่องจากมันเป็น BSD และดูเหมือนว่า GNU 3.0 จะครอบคลุมกรณีที่คุณกำลังพูดถึง ในฐานะที่ไม่ใช่นักกฎหมายฉันจะตีความคำพูดที่ว่า "รหัสที่สร้างขึ้นไม่ได้ครอบคลุมเฉพาะ"

Dart Home Page อ้างถึงสิ่งนี้: BSD License

ดังนั้นคำถามของคุณเกี่ยวกับ GPL คือ moot

นอกจากนี้: GNU 3.0 License

มีวิธีที่ฉันสามารถ GPL คนเอาท์พุทได้รับจากการใช้งานของโปรแกรมของฉัน? ตัวอย่างเช่นหากโปรแกรมของฉันถูกใช้เพื่อพัฒนาการออกแบบฮาร์ดแวร์ฉันจะต้องให้การออกแบบเหล่านี้ต้องว่างหรือไม่ (#GPLOutput)

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

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

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


3
คำถามไม่เกี่ยวกับคอมไพเลอร์ Dart ซึ่งเป็น GPL (ซึ่ง BTW จะไม่เกี่ยวข้องกับเอาต์พุตของโปรแกรม (คอมไพเลอร์)) แต่เกี่ยวกับโปรแกรม Dart ที่เป็น GPL

2
@delnan ฉันไม่ได้อ่านคำถามแบบเดียวกับที่คุณทำ 1) ดูลิงค์แรกของฉัน Dart คือ BSD 2) ถ้าโปรแกรม Dara เป็น GPL เขาจะไม่ถามคำถาม ฉันอ่านคำถามในขณะที่เขาอยากรู้ว่าเขาจำเป็นต้องปล่อยซอร์สโค้ด Dart ของเขาด้วยหรือไม่ คุณอ่านคำตอบของฉันจริงหรือ
เปาโล

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

ขออภัยขยายสิ่งนี้ออกไป ... ดังนั้นหากไม่มีโปรแกรม Dart เป็น GPL และ Dart คือ BSD (จริงๆแล้วมันเป็นหรืออย่างน้อยเว็บไซต์บอกว่าเป็น) แล้วคำถามคืออะไร ถ้าเป็นเพียง "ฉันต้องแจกจ่าย A (GPL'd) เมื่อฉันต้องการเผยแพร่ B (ไม่ใช่ GPL)" แสดงว่าเป็นคำถามซ้ำ
Paul

2
@ พอลข้อสันนิษฐานของฉันและการสันนิษฐานของคนอื่นคือโปรแกรม Dart เป็น GPL ในความเป็นจริง

0

คำถามพื้นฐานคือ:

การรวม javascript บนหน้าเว็บ (เช่นการอ้างอิงผ่านแท็กสคริปต์) ถือเป็น "การถ่ายทอด" ของ GPLed หรือไม่

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

ฉันไม่สามารถหาคำตอบที่ชัดเจนสำหรับคำถามนี้ได้ในไซต์ FSF แต่เรียงความของ Stallman "กับดัก Javascript"ดูเหมือนว่าจะระบุว่าเขาพิจารณาว่ามันกำลังนำพาและเป็นเช่นนั้นคุณจะต้องทำให้ซอร์สโค้ดต้นฉบับของ Dart พร้อมใช้งาน ดูบันทึกย่อของเขาเกี่ยวกับการอนุญาตรุ่นที่ย่อเล็กสุดที่ไม่รวมถึงข้อความของใบอนุญาต แต่ยังคงอยู่ภายใต้ใบอนุญาต

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

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


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

@ WinstonEwert เมื่อฉันพูดว่า "source code" ฉันหมายถึงไฟล์ต้นฉบับ Dart ดั้งเดิมที่ใช้สร้างจาวาสคริปต์ ฉันจะอัปเดตคำตอบเพื่อให้ชัดเจน
Craig
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.