Apa yang harus saya lakukan untuk TIDAK mencuri kode "Hello World" dengan lisensi GPL?


42

Dalam proyek tersebut, saya menemukan file math.c,, dengan header GPL besar dan ...

//------------------------------------------------------------------------------
/// Returns the minimum value between two integers.
/// \param a  First integer to compare.
/// \param b  Second integer to compare.
//------------------------------------------------------------------------------
unsigned int min(unsigned int a, unsigned int b)
{
    if (a < b) {
        return a;
    }
    else {
        return b;
    }
}

OK, keren jadi saya harus mendapatkan nilai minimum dan ... file ini !? Jadi saya perlu membuka seluruh proyek karena itu? Atau apakah saya perlu menemukan kembali matematika?

Saya tidak percaya itu hanya gila, jadi pertanyaannya adalah: kapan kita bisa menghapus header GPL?

Harus saya menjadi aneh dan melakukannya ?:

unsigned int min(             unsigned int
JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE,
unsigned int hyrthrtRERG            ) {  if
(JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE
< hyrthrtRERG            ) {  return JEIOfuihFHIYEFHyigHUEFGEGEJEIOFJOIGHE;  }
else {return hyrthrtRERG            ;    } }

Serius, apakah mereka ingin saya menulis kode seperti di atas?


22
Nah, dalam kasus terbaru Google vs Oracle the jury did find that one nine-line function that Google acknowledged copying was infringing(dari ArsTechnica ).
Zenon

5
Aww ayolah, serius, min?
Mircea Chirea

33
Saya akan mengatakan bahwa keberadaan pertanyaan ini membuktikan hal yang buruk - Pekerjaan seorang programmer menjadi kurang pemrograman, lebih banyak kekacauan hukum dan birokrasi
K.Steff

4
Salin itu . Fungsi sepele seperti mintidak dilindungi oleh hak cipta. Lihat jawaban saya untuk detailnya.
Tony the Pony

6
@ Loki, Anda kehilangan satu mil. Algoritma dilindungi oleh paten, bukan oleh hak cipta. Hak cipta berakhir 70 tahun setelah kematian penulis, sehingga karya berhak cipta di tahun 60-an masih cukup baru. Akhirnya, pertanyaannya adalah tentang menyalin kode INI, bukan tentang algoritme.
alexis

Jawaban:


53

Tidak seperti banyak pengguna di sini, saya hanya menyarankan: Salin!

Pastikan format kode sesuai dengan standar pengkodean Anda dan Anda mungkin harus menghapus atau menulis ulang komentar. Tidak ada yang akan tahu Anda menyalinnya - ketika sepotong kode ini sederhana, Anda mungkin telah menulisnya dari awal. Jika standar pengkodean Anda entah bagaimana memerlukan fungsi agar terlihat persis seperti pada snippet, maka jadikan itu - asalkan terlihat seperti yang akan terlihat jika Anda telah menulisnya dari awal.

Pikirkan tentang ini, ini hampir tidak (!) Pertama kali karya tulis ini ditulis - ketika ada sesuatu yang sepele ini, ada sedikit alasan untuk tidak menyalinnya, jika Anda tidak ingin menulis sendiri.

Bahkan berdiskusi ini sepertinya sedikit berlebihan bagi saya - kita harus pragmatis jika kita ingin menyelesaikan pekerjaan nyata!


5
pertanyaan sebenarnya adalah di mana penghalang antara hal sepele dan non-sepele dan apakah ada cara untuk benar-benar yakin bahwa orang tidak akan menunjukkan kode saya dengan sesuatu yang sama "LIHATLAH REALISASI GPL MIN SAYA!" ... Saya benar-benar takut orang-orang itu> _ <
cnd

20
Nah, ada konsep ambang batas orisinalitas dalam hak cipta. Dan metode sederhana semacam itu seharusnya tidak bisa dilindungi hak cipta. Namun, IANAL dan yurisdiksi bervariasi. Namun, sesuatu yang ditulis oleh setiap sarjana CS setidaknya lima kali dengan cara yang persis sama mungkin akan jatuh di bawah ini.
Joey

4
@nilu: Let us then say that the programmer wrote his own version of MIN and it ended up looking exactly like the one from math.c - would it then be okay?Ya, jika itu kecelakaan. "Apa bedanya kalau dia baru saja menyalinnya?" Bit memiliki warna . ansuz.sooke.bc.ca/entry/23 Ini bukan sesuatu yang kebanyakan ilmuwan komputer bisa pahami - ini memang topik yang kompleks, tapi itu adalah sesuatu yang diakui oleh hukum. Jika Anda ragu apakah sesuatu itu legal atau tidak, Anda sebaiknya berbicara dengan pengacara .
Mark Byers

4
@alexis: Saya mengerti maksud Anda, tetapi saya tidak benar-benar setuju - jika kode yang dihasilkan identik, tidak seorang pun kecuali programmer dapat mengetahui apakah itu disalin atau ditulis dari awal. Jelas, seseorang harus memiliki sedikit kesulitan dalam mengimplementasikan min dan mungkin akan memakan waktu lebih sedikit daripada menemukan implementasi lain. Namun, jika seorang programmer memang menyalinnya dan tidak ada lagi yang tahu bahwa ia belum menulis sendiri fungsinya, kerusakan apa yang telah terjadi? Kecuali programmer merasa semacam 'bersalah', jawabannya tidak. Sisanya hanyalah semantik.
nilu

5
@MarkByers: Ketika saya mengatakan 'tidak dapat membuktikan', maksud saya tidak ada bukti fisik yang menunjukkan bahwa suatu kejahatan bahkan telah dilakukan - kejahatan yang telah dilakukan benar-benar terbatas pada pikiran programmer. Jelas, ini tidak dapat terjadi jika beberapa permen dicuri - ini memiliki dampak fisik pada dunia (lollipop - = 1). Jika 'kejahatan' terbatas pada pikiran Anda sendiri, siapa yang menilai apakah itu bermoral atau tidak bermoral?
nilu

18

Itu tidak langsung menjawab pertanyaan Anda, tetapi coba ini:

#define min(a,b) ((a) < (b) ? (a) : (b))

Saya dengan ini merilis makro yang mulia dan kompleks ini ke domain publik. Padahal saya mungkin harus menerbitkan makalah tentang teknik ini.

Jika Anda makro-fob, coba versi inline ini (sungguh, kecuali jika Anda meng-coding pada SPARC, Anda akan menghemat banyak siklus CPU dengan tidak membungkus fungsi yang ada mindi mana-mana seperti dalam kode masuk / keluar):

inline int min(int a, int b)
{
    return a < b ? a : b;
}

Masalah lisensi kode untuk cuplikan sepele agak menyusahkan. Periksa dengan seorang pengacara, tetapi saya tergoda untuk berasumsi bahwa mereka tidak benar-benar dapat dilisensikan dan / atau lisensi tidak dapat ditegakkan dalam praktik. Sama seperti Anda tidak dapat hak cipta atau merek dagang kata 'kata', lalu bersandar pada orang yang menggunakannya. (oops)


1
Oh, mereka pasti bisa hak cipta kode itu, tetapi mengingat kesederhanaan algoritma, mereka akan sulit sekali membuktikan di pengadilan bahwa Anda menyalinnya kecuali Anda melakukan sesuatu yang bodoh seperti komentar kiri utuh, dll. Aturannya bukan bahwa Anda dapat dapat menggunakan kode yang sama, aturannya adalah Anda hanya dapat melakukannya jika Anda menulisnya menggunakan otak Anda sendiri, dan tidak menyalin aslinya dengan cara apa pun.
Gort the Robot

2
@StevenBurnap Tentu saja kode asli juga akan memiliki masalah yang sama: dapatkah mereka membuktikan bahwa mereka memiliki hak cipta (mis. Bahwa mereka tidak menyalinnya dari beberapa implementasi sebelumnya)?
Richard

19
Masalah dengan versi makro min muncul ketika Anda mencoba melakukannya min(a++,b++).

4
"lepaskan ini ... ke domain publik" sangat berpusat pada AS. Itu tidak berarti hal yang sama di banyak negara dan memang di beberapa negara secara hukum tidak mungkin.

9
Terima kasih, tetapi pada kompiler dari tahun 2000-an, kompiler dapat menyamai hal-hal sepele seperti min.
DeadMG

18

Penafian : Saya bukan pengacara. Gunakan saran saya dengan risiko Anda sendiri.

Implementasi minini tidak dapat dilindungi hak cipta , karena hanya ada sedikit cara yang masuk akal untuk menulisnya.

Di dunia hukum, ini dikenal sebagai doktrin merger (juga dikenal sebagai pemecah gagasan-ekspresi). Gagasan (non-hak cipta) dari fungsi dikatakan telah "digabungkan" dengan ekspresi (berpotensi dapat dilindungi hak cipta) . Oleh karena itu, kode ini tidak tunduk pada hak cipta - Anda bebas menggunakannya.

Agar aman, jangan menyalinnya kata demi kata . Gunakan nama berbeda untuk variabel, terapkan pemformatan Anda sendiri, jangan menyalin komentar kata demi kata. Representasi literal yang tepat dari kode ini dapat dilindungi oleh hak cipta.

Ingatlah bahwa ini tidak menjamin seseorang tidak akan menuntut Anda, tetapi setidaknya Anda akan memiliki pertahanan yang kuat.

Juga, ingatlah bahwa meskipun sepotong kode tidak dilindungi oleh hak cipta, kode tersebut mungkin masih dilindungi oleh paten perangkat lunak (Ini tidak berlaku untuk minfungsi Anda ).


2
Anda mencoba mengatakan itu kepada Oracle!
GordonM

1
Mungkin fungsi 9-line itu tidak sepele ... Saya ingin melihat kode.
Tony the Pony

1
programmers.stackexchange.com/a/148362/28718 tampaknya cukup sepele bagi saya, dengan asumsi bahwa itu kode yang benar.
GordonM

12

Saya merilis kode berikut di bawah lisensi BSD . Karena lisensi itu jauh lebih permisif, Anda seharusnya tidak mengalami masalah hak cipta jika Anda menggunakan implementasi saya.

unsigned int min(unsigned int a, unsigned int b)
{
    return (a > b? b: a);
}

Bagaimana saya bisa yakin bahwa Anda tidak menyegel kode GPL itu dan menulis ulang? : P (hanya bercanda)
cnd

1
Kamu bukan. Tetapi jika Anda menggunakan kode saya, Anda dapat mengklaim bahwa Anda menggunakannya dengan itikad baik.
GordonM

3
Bersukacitalah, saudara-saudara, karena zaman baru telah tiba - kita sekarang dapat menemukan mindalam perangkat lunak sumber tertutup. Juga, @Sholy, sekarang ini masalah GordonM apakah ia telah menyalinnya, atau tidak.
K.Steff

5
Anda juga merilisnya di bawah "Creative commons" Lihat bagian bawah halaman ini tentang kode yang disisipkan di sini.
Martin York


11

Saya setuju, ini situasi yang tidak masuk akal, tetapi Anda sendiri yang harus disalahkan. Jika Anda menulis kode hak milik, Anda tidak boleh membaca file sumber berlisensi GPL, titik. Hapus math.c dari sistem file Anda, simpan dokumentasi, dan jangan ragu untuk kembali mengimplementasikan bagian apa pun dari API yang Anda butuhkan. Jika Anda tidak membaca kode, Anda tidak perlu khawatir jika kode Anda sendiri ternyata mirip.

Buang-buang, katamu? GPL secara sengaja mencegah Anda mendapatkan manfaat dari kode bebas tanpa memberikan kembali kepada ekosistem. Jika Anda tidak dapat atau tidak akan memenuhi persyaratannya, dan Anda tidak ingin menerapkan perpustakaan matematika lain, Anda selalu dapat membeli atau menemukan yang gratis yang dilengkapi dengan lisensi yang dapat Anda terima.

Pemrogram Microsoft tidak diperbolehkan membaca kode sumber terbuka, untuk melindungi perusahaan dari masalah hukum. Untuk alasan yang murni etis, Anda harus melakukan hal yang sama dengan program mana pun yang lisensinya tidak Anda patuhi.

Anda tidak memiliki hak untuk menggunakan ini math.c, tetapi tidak ada yang mencoba memojokkan pasar pada implementasi min. Tujuan dari GPL adalah untuk meningkatkan "kebebasan" programmer (dan kebebasan pengguna akhir), bukan untuk membatasi itu. Lisensi GNU, FSF, dan Gerakan Perangkat Lunak Bebas dimulai dengan Richard Stallman, dan Stallman memulai dengan menerapkan kembali dari awal setiap versi baru Symbolics lisp ketika dirilis. FSF tidak akan (dan tidak bisa) mengejar siapa pun untuk menerapkan kembali perpustakaan GPL.


Jadi, tapi, ini contoh yang sangat aneh. Ini contoh, itu artinya saya harus membacanya dan mengikutinya ... tetapi sejauh yang saya mengerti saya bebas untuk tidak memilih lisensi GPL di sini. Jadi saya tahu siapa Stallman;)
cnd

2
Sholy, maaf tapi aku tidak tahu apa yang kamu katakan! Contoh apa? (Apakah Anda juga bertanya kepada saya siapa Stallman itu? Cari di Google. Atau cukup periksa wikipedia.)
alexis

3
"Pemrogram Microsoft tidak diizinkan membaca kode sumber terbuka" ya ampun, mengerikan - apakah ada di mana saja saya bisa membaca tentang itu? Google tidak membantu.
amara

Pertanyaan bagus. Saya membacanya di beberapa forum pengembangan Iron Python, tetapi sayangnya saya tidak dapat menemukannya sekarang. Ringkasan: Jim Hugunin ( hugunin.net/microsoft_farewell.html ) menyebutkan bahwa mereka tidak diizinkan untuk melihat implementasi python dan seseorang bercanda bertanya apakah mereka diizinkan untuk melihat kode mereka sendiri (Microsoft telah membuat open source Iron Python) . Jawabannya adalah: Mereka membuat pengecualian khusus untuk Iron Python.
alexis

Orang-orang yang kebebasannya untuk ditingkatkan GPL adalah semua pengguna program, bukan (khususnya) programmer.
James Youngman

7

Jawab: Hanya dengan izin tertulis dari penulis.

Itu kode yang dilindungi hak cipta. Anda tidak dapat menyalinnya tanpa izin dari penulis.

Anda harus menulis versi Anda sendiri min, atau menyalin varian minyang menggunakan lisensi yang berbeda.

Ingat, dengan hak cipta, itu adalah kode yang dilindungi, bukan algoritma. Hukum hak cipta berasal dari teks. Bahkan jika "math.c" tidak lain adalah komentar dan tidak memiliki kode yang dapat dieksekusi sama sekali, itu masih dilindungi oleh hak cipta.


1
Apa artinya versi sendiri? Versi SAYA SENDIRI dari MIN, terdengar lucu!
cnd

2
Ingat, Anda tidak memiliki min, Anda memiliki urutan karakter tertentu yang akan diterapkan min.
Gort the Robot

2
Anda tidak dapat mengubahnya sama sekali tanpa izin dari penulis kecuali untuk penggunaan pribadi. Anda harus menulis ulang dari awal. Itulah intinya. Perhatikan bahwa jika Anda duduk di editor kosong dan menulis sesuatu yang hampir identik dengan itu, itu akan baik-baik saja, karena Anda tidak menyalinnya. (Dengan asumsi Anda tidak mengetik dari memori.)
Gort the Robot

2
Tidak, saya tidak bercanda. Dan ya, Anda mungkin bisa lolos dengan itu dalam kasus seperti ini. Terserah pemegang hak cipta untuk membuktikan bahwa Anda telah melakukannya. Perhatikan bahwa saya hanya memberi tahu Anda apa hukum itu, bukan membelanya.
Gort the Robot

3
Karena jika Anda tidak menghitung ulang hal-hal sepele ini, Anda menggunakan pekerjaan orang lain dengan cara yang mereka belum memberi Anda izin untuk melakukannya. Jika itu sangat sepele sehingga Anda tidak membutuhkannya, jangan gunakan itu.
alexis

6

Ini yang ditipu Google. Ini sepertinya akal sehat untuk sebuah array.

 908     /**
 909      * Checks that fromIndex and toIndex are in range, and throws an
 910      * appropriate exception if they aren't.
 911      *
 912      * @param arrayLen the length of the array
 913      * @param fromIndex the index of the first element of the range
 914      * @param toIndex the index after the last element of the range
 915      * @throws IllegalArgumentException if fromIndex > toIndex
 916      * @throws ArrayIndexOutOfBoundsException if fromIndex < 0
 917      *         or toIndex > arrayLen
 918      */
 919     private static void rangeCheck(int arrayLen, int fromIndex, int toIndex) {
 920         if (fromIndex > toIndex)
 921             throw new IllegalArgumentException("fromIndex(" + fromIndex +
 922                        ") > toIndex(" + toIndex+")");
 923         if (fromIndex < 0)
 924             throw new ArrayIndexOutOfBoundsException(fromIndex);
 925         if (toIndex > arrayLen)
 926             throw new ArrayIndexOutOfBoundsException(toIndex);
 927     }

Jika ini semua, putusan akan dilemparkan pada saat naik banding. Namun menurut Wired, hakim juga menemukan Google menyalin 8 file lainnya. Lihat wired.com/wiredenterprise/2012/05/google-oracle-decompile
Tony the Pony

5
Ya, tetapi "akal sehat" bukan bilah untuk hak cipta. Apakah mereka menyalin dan mengedit atau menulis sendiri dari awal. Apakah sesuatu itu "akal sehat" adalah ujian untuk paten, bukan hak cipta. Dengan kata lain, Oracle dapat hak cipta teks itu, tetapi mereka tidak dapat mematenkan algoritma itu.
Gort the Robot

Kesembilan garis ini adalah contoh klasik dari doktrin merger. Berapa banyak cara lain yang ada untuk melakukan pemeriksaan rentang pada array?
Tony the Pony

1
@TonythePony, banyak, jika fungsi melempar pengecualian yang berisi pesan teks.
avakar

4
Hanya sedikit orang yang menyebutkan bahwa orang yang menyalin teks ini di Google juga orang yang menulisnya di Sun. Programmer harus menyadari bahwa Stallman - ekstrimis berjanggut gila - benar . Uang, akar dari segala kejahatan, membuat orang lupa mengapa mereka berpartisipasi dalam teknologi. : - /
HostileFork

5

Saya tidak akan menggunakan kode ini, karena komentar tidak cocok dengan apa yang dilakukan oleh kode tersebut. Komentar berbicara tentang integer, sementara kode tersebut digunakan unsigned int. Siapa yang tahu kesalahan apa yang terkubur dalam kedalaman fungsi ini?

Serius, di sinilah "Jangan menemukan kembali roda" menjadi konyol dan Anda lupa membawanya dengan sebutir garam. Cukup tulis versi Anda sendiri dari awal, cocokkan dengan konvensi penamaan dan panduan gaya kode Anda (mis. math_min_uint(x, y)), Pastikan itu berfungsi (uji unit atau apa pun) dan teruskan kehidupan Anda tanpa masalah hak cipta.

Dengan pengalaman yang terus bertambah, cuplikan sepele yang Anda butuhkan berulang kali ini ada di kotak peralatan Anda dan Anda akan menulis ulang tanpa berpikir terlalu banyak, atau cukup mendapatkannya dari perpustakaan Anda sendiri.


2

Orang-orang sepertinya lupa bahwa undang-undang hak cipta, baik dalam semangat maupun surat, berarti bahwa tindakan penyalinan sebenarnya dilarang - bukan tindakan mengekspresikan pikiran yang sama sendiri, bahkan jika hasilnya ternyata serupa secara mencurigakan.

Jika Anda mengambil kode GPL, memodifikasinya, menggunakannya dengan cara yang bertentangan dengan lisensi yang Anda terima, dan mengklaim itu bukan karya turunan, maka Anda melanggar hukum. Bahkan jika Anda menggunakan versi kedua - Anda telah mengubah nama semua variabel, dan mengubah formatnya, tetapi masih berasal dari yang asli.

Namun, jika Anda menulis versi Anda sendiri min, dan karena sepele tugas, fakta bahwa hanya ada begitu banyak cara Anda dapat menulis hal seperti itu, dan sedikit kebetulan, versi Anda akhirnya persis sama ke kode GPL, maka Anda belum menyalin apa pun.

Namun, apakah salah satu cerita akan lolos di pengadilan adalah masalah lain. Jika sampel kode yang lebih besar atau lebih kompleks muncul di tempat lain, lengkap dengan komentar, pemformatan, dan kesalahan pengejaan, Anda akan kesulitan meyakinkan siapa pun yang menulisnya secara independen, terlebih lagi jika dapat ditunjukkan bahwa Anda tahu yang asli source (yang, mengingat fakta bahwa Anda telah mempostingnya di sini, seharusnya cukup sepele).


1

Jika kode ini benar-benar sepele sebagai contoh "min" maka ada kemungkinan yang sangat tinggi bahwa orang lain telah menerapkan fungsi yang sama di bawah lisensi open source yang berbeda.

Bergantung pada lisensi, Anda mungkin diperbolehkan memasukkan kode ke dalam sumber terbuka Anda.


1

Cukup tulis sendiri dalam 30 detik. Anda dapat menggunakan algoritma yang persis sama. Hanya saja, jangan menyalin / menempel.

Hak cipta hanya melindungi ekspresi suatu ide, bukan ide itu sendiri. Anda dapat menggunakan ide secara langsung asalkan Anda tidak menyalinnya.

FWIW, saya ragu bahwa menyalin sepotong kode sepele seperti itu akan membuat Anda mendapat masalah. Kerusakan akan menjadi nol, dan mungkin akan jatuh di bawah penggunaan yang adil di sebagian besar yurisdiksi. Tetapi kasus-kasus hukum sangat menyakitkan sehingga saya tidak ingin mengambil risiko.


1

Sebagai kode GPL, pertanyaan besar di sini adalah apakah Anda berencana mendistorsi kode Anda atau menjual perangkat lunak Anda.

Jika Anda hanya menggunakannya secara internal, GPL memberi Anda kebebasan penuh untuk melakukan apa yang Anda inginkan.

Jika Anda berencana untuk mendistribusikan paket Anda - cara termudah adalah dengan GPL paket Anda dengan persyaratan yang sama dengan sumber GPL yang Anda gunakan. Ada cara lain tetapi menjadi rumit.

Jika Anda berencana untuk menjual perangkat lunak Anda, Anda harus mendistribusikan kode sumber untuk setiap kode GPL yang Anda gunakan dan / atau diubah di bawah lisensi GPL yang sama dengan yang Anda peroleh.


0

Jika Anda menggunakan C ++ dan bukan C, hindari masalah ini dengan menggunakan pustaka standar std::minatau std::maxdi <algorithm>:

http://www.cplusplus.com/reference/algorithm/min/

Itu membeli Anda secara umum, dan itu akan bekerja untuk semua jenis yang sebanding. Juga: ketika apa pun d-bag mencoba mengklaim bahwa mereka menciptakannya dan dilindungi oleh paten perangkat lunak, mereka akan bergemuruh dengan komite ISO ... bukan Anda.

Dalam kasus umum, catat siapa yang menerbitkan kode. Korporasi, atau individu yang waras? Jika itu adalah individu yang waras (seperti halnya dengan banyak sumber terbuka), tulis catatan yang bagus untuk mereka dan dapatkan izin. Simpan tanggapan mereka dengan mengatakan tidak apa-apa. Masalah terpecahkan.


-2

Untuk kasus umum: Kode yang lebih kompleks yang pasti dapat dilindungi hak cipta, berbeda dengan min dan max (yang mungkin atau mungkin tidak dapat dilindungi hak cipta).

Kemudian Lisensi kode Anda sesuai dengan perpustakaan yaitu GPL! Namun perlu dicatat bahwa ada perpustakaan LGPL (dan GPL dengan pengecualian) yang memungkinkan Anda menggunakan implementasinya sambil memberikan kode apa pun lisensi yang Anda inginkan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.