Klien menginginkan kode sumber, tetapi mengandung banyak kode bersama yang saya gunakan kembali dengan proyek lain

96

Saya memiliki klien yang ingin saya memberikan kode sumber dengan biner aplikasi yang dikembangkan. Mereka awalnya mengatakan apa-apa tentang kode sumber, tetapi mereka baru-baru ini mengatakan mereka membutuhkannya. Kontrak belum selesai. Mereka menyetujui pekerjaan itu, tidak menandatangani, dan kemudian kembali dengan klausa ini.

Masalahnya adalah: Saya memiliki basis kode yang saya buat selama bertahun-tahun dan digunakan sebagai templat untuk sebagian besar aplikasi yang saya tulis. Itu jauh lebih besar dari ruang lingkup proyek.

Saya juga bermaksud menggunakannya untuk suatu produk, jadi saya benar-benar tidak ingin menyediakannya untuk proyek yang relatif kecil.

Saya menduga ini bukan pertama kalinya hal ini terjadi di industri ini. Apa cara terbaik untuk menghindari masalah ini? Saya menduga hal-hal seperti perpustakaan bersama dapat membantu.

robby987
sumber
18
Untuk apa mereka membutuhkannya? Kemungkinannya adalah mereka hanya ingin memastikan memiliki kode jika Anda keluar dari bisnis. Anda mungkin dapat menambahkan lisensi yang membatasi penggunaan yang diizinkan. Pada suatu waktu sebuah perusahaan tempat saya bekerja menyetor (benar kata?) Kode sumber dengan perusahaan pengacara sebagai jaminan untuk kasus seperti itu.
thorsten müller
33
Perangkat lunak khusus harus dikirimkan dengan kode sumber. Kalau tidak, ini adalah produk eceran. Saya tidak berpikir mereka membutuhkan produk beku jika terjadi sesuatu pada Anda / bisnis Anda nanti. Tapi lakukan pengisian daya yang sesuai. Juga pertimbangkan untuk meletakkan kode perpustakaan Anda di perpustakaan yang dikompilasi (jika didukung oleh bahasa Anda) sehingga mereka dapat memodifikasi perangkat lunak, kompilasi tetapi tidak dengan mudah menggunakan kembali perpustakaan Anda dengan sendirinya.
CodeAngry
14
@CodeAngry "harus"? Tidak. Hanya jika mereka membayar jumlah uang yang tepat.
o0 '.
32
@CodeAngry nggak. Itu milikmu, kecuali disepakati sebaliknya ...
o0 '.
46
Mari kita hadapi itu - tidak peduli berapa tahun Anda telah dimasukkan ke dalam kerangka kerja Anda, itu tidak akan memiliki nilai bagi siapa pun selain Anda. Tidak seorang pun akan membuat aplikasi baru berdasarkan kerangka kerja yang tidak berdokumen, tidak didukung, dan umumnya tidak dikenal, tidak peduli sebaik apa pun Anda berpikirnya. Berikan kode sumber lengkap kepada mereka, pastikan Anda mempertahankan hak cipta untuk bagian non-dipesan lebih dahulu dari aplikasi Anda, dan dapatkan pelanggan yang senang.
Guntram Blohm

Jawaban:

137

Hal pertama yang perlu diingat adalah bahwa kode sumber memiliki nilai yang terpisah dari binari. Sangat masuk akal untuk menolak menandatangani kontrak yang memerlukan pengiriman kode sumber, atau menuntut pembayaran tambahan untuk pengiriman kode sumber. Kontrak adalah dokumen dua arah. Jangan biarkan bagian lain mendikte apa yang diperlukan hanya karena mereka adalah "perusahaan besar" dan "lakukan ini sepanjang waktu". Pertama, memutuskan apa yang Anda bersedia untuk memberikan dan bagaimana Anda ingin kompensasi. Kemudian bawa kontrak mereka ke pengacara dan cari tahu apa yang perlu diubah. Kemudian, Anda bernegosiasi.

Jangan lakukan apa yang dilakukan banyak anak muda ketika mereka mulai berkontraksi. Jangan hanya mendaftar karena sepertinya mereka memiliki banyak pengalaman dan Anda tidak. Itu cara yang bagus untuk ditipu.

Lihatlah mengapa mereka menginginkan sumbernya. Mereka mungkin menginginkannya sehingga mereka memiliki opsi untuk menggunakan pengembang lain di kemudian hari. Atau mereka mungkin menginginkannya hanya karena mereka takut Anda mungkin tertabrak bus dan tiba-tiba mereka akan dibiarkan dengan binari yang tidak dapat mereka perbaiki. Jika ini kasus kedua, lihat ke Layanan Escrow Kode Perangkat Lunak . Layanan ini menyimpan kode sumber jika Anda bangkrut atau tidak dapat mempertahankan perangkat lunak. Ini dapat memuaskan keinginan Anda untuk menjaga kode Anda tetap milik untuk melayani pelanggan lain dan keinginan mereka untuk tidak dibiarkan memegang tas dengan seperangkat biner yang tidak dapat dipelihara jika terjadi sesuatu yang buruk.

Steven Burnap
sumber
17
Bagaimana jika Layanan Escrow Kode Perangkat Lunak bangkrut?
user11153
21
Maka pemilik kodenya - semoga - masih ada, dan dapat mengirimkan kodenya ke Layanan Escrow lain. Layanan ini dimaksudkan untuk menghapus Single Point Of Failure.
Alexander
17
Apakah Layanan Escrow Kode Perangkat Lunak menggunakan Layanan Escrow Kode Perangkat Lunak?
FreeAsInBeer
29
@FreeAsInBeer: Tidak, mereka menggunakan Escrow Escrow Services dari Code Software. Jelas sekali.
nneonneo
@Alexander, Hanya jika escrowing kembali merupakan kewajiban yang dikontrak. Kalau tidak, pengembang akan mengenakan biaya untuk escrow kedua lagi.
Pacerier
67

"Tidak" adalah jawaban yang sangat bagus, sebenarnya itu adalah jawaban yang sangat berguna yang karena alasan tertentu saya tidak bisa mengerti sangat diremehkan.

"Hai, kami tiba-tiba memutuskan bahwa kami hanya ingin kode sumber juga, gratis."
"Hai, tidak."

Sebenarnya tidak terlalu sulit.

Kemudian, jika mereka ingin membayar jumlah uang yang mengerikan atas apa yang telah mereka berutang kepada Anda, Anda dapat memberi mereka versi terpangkas dari aplikasi Anda, yang hanya mencakup sumber yang benar-benar mereka butuhkan, dan dengan hati-hati mereka mendapatkan hak yang benar-benar non- eksklusif.

Jangan menyulitkan hal-hal sederhana.

o0 '.
sumber
Hebat, jawaban singkat.
Pantai Laut Tibet
26

Pertanyaan Anda adalah, "apa cara terbaik untuk menghindari masalah ini?" Tapi apa yang Anda lihat sebagai masalah? Yang lain dengan tepat menunjukkan bahwa ini masalah negosiasi: semuanya memiliki nilai, dan terserah Anda memberi klien harga untuk menyediakan apa yang diminta.

Tetapi Anda juga harus hati-hati mempertimbangkan — dan menulis ke dalam kontrak — implikasi dari pemberian kode. Apakah hanya supaya klien dapat melihatnya? Bisakah klien memodifikasinya? Dan khususnya, apakah Anda mempertimbangkan untuk memberikan hak eksklusif kepada klien Anda ke basis kode yang telah Anda buat selama bertahun-tahun dan digunakan sebagai templat untuk sebagian besar aplikasi sehingga Anda tidak akan pernah dapat menggunakannya lagi di masa mendatang?

Anda perlu memastikan kontrak secara eksplisit menyatakan siapa yang memiliki hak untuk menggunakan kode, dan dengan cara apa.

Sunting Reg
sumber
19

Ingat bahwa kode sumber apa pun memerlukan lisensi. Jika Anda menyerahkan kode sumber, perusahaan dapat menggunakan kode sumber untuk melakukan apa pun yang diizinkan oleh lisensi, dan apa pun di luar itu adalah pelanggaran hak cipta. Jadi, jika Anda menyerahkan kode sumber, Anda akan memiliki kontrak yang membuat sangat jelas bahwa Anda mempertahankan hak cipta eksklusif dari kode sumber, dan penggunaan kode sumber apa yang diizinkan. Dan tentu saja kode sumber + lisensi tidak akan datang secara gratis.

Perusahaan besar tidak akan melanggar hak cipta Anda, karena ketahuan akan menyebabkan kerusakan besar pada reputasi mereka, selain dari kerusakan finansial. Di sisi lain, membayar untuk perangkat lunak tanpa jaminan bahwa masalah apa pun dapat diperbaiki di masa depan, mungkin tidak dapat diterima oleh klien.

gnasher729
sumber
33
TETAPI juga menganggap bahwa mendeteksi penyalahgunaan kode sumber sangat sulit, terutama jika Anda tidak mencarinya. Jangan mempercayai lisensi secara membabi buta: bagi sebagian orang itu hanya selembar kertas.
o0 '.
1
@Lohoris Namun, jika Anda mencurigai bahwa suatu aplikasi menggunakan kode Anda, sangat mudah untuk mengatakannya, tidak peduli itu hanya biner. Keahlian teknik reverse engineering dasar adalah semua yang Anda harus yakin.
rev
6
-1 karena saya tidak berpikir ada bukti untuk klaim "Sebuah perusahaan besar ..." Anda, itu hanya dugaan.
djechlin
@ Lohoris: Jika itu terjadi, apa kerusakannya bagi Anda? Kasus terbaik: Poster itu menawarkan jasanya kepada perusahaan lain, dan menemukan mereka sudah memiliki perpustakaan yang sangat ia banggakan. Hari gajian utama!
gnasher729
13

Sebelumnya saya biasanya memberikan kode sumber (perpustakaan dan semua) di bawah lisensi MIT kepada klien. Jika perpustakaan Anda terorganisasi dengan baik, Anda hanya menyediakan file / sumber daya yang dibutuhkan untuk klien tertentu tetapi tidak lebih. Saya pikir itu adil bagi saya dan klien. Namun selalu ada masalah kode baru yang ditulis untuk klien tertentu di bawah kontrak yang bukan bagian dari perpustakaan sebelumnya. Jadi saya mulai membahas masalah dengan klien sebelum memulai proyek. Beberapa klien menginginkan kepemilikan kode itu, beberapa tidak (saya selalu memberikan insentif negatif, seperti harga yang lebih tinggi bagi mereka yang melakukannya). Tapi, benar-benar untuk beberapa klien diskusi itu sangat membingungkan dan kadang-kadang saya akhirnya berbicara untuk 3 atau 5 orang yang berbeda (termasuk pengacara mereka) hanya untuk mendapatkan proyek yang disetujui.

Jadi sekarang semua perpustakaan saya adalah bagian dari kerangka kerja kustom yang selalu saya gunakan untuk mengembangkan dan saya menjelaskan kepada klien bahwa saya akan menggunakan kerangka kerja ini tetapi kerangka itu adalah produk yang berbeda dengan lisensi yang berbeda. (Kadang-kadang saya menggunakan "komponen perangkat lunak" ketika menjelaskan karena "kerangka kerja" mungkin tidak diketahui oleh mereka). Saya selalu memberikan kode dari file yang digunakan di bawah lisensi MIT dan (karena semua kode diatur dengan baik) kode tingkat rendah (bahkan yang baru) tetap dalam kerangka (untuk digunakan kembali oleh saya dan oleh mereka) tetapi kode yang terkait untuk aplikasi mereka hanya bagi mereka untuk menyimpan di bawah ketentuan mereka sendiri (kode itu kemungkinan besar tidak akan berguna bagi saya untuk digunakan kembali dalam proyek lain). Tentu saja semua itu ditulis dengan benar dalam kontrak. Saya pikir ini adil juga.

Kuncinya adalah: "komponen-komponen ini adalah produk yang berbeda" dan semua ditulis dalam kontrak sebelum memulai.

Jadi ya, ide Anda tentang menggunakan perpustakaan bersama mungkin benar. Namun, saya bertanya kepada Anda, mengapa Anda tidak memberikan mereka kode sumber yang Anda gunakan, di bawah lisensi yang akan memungkinkan mereka untuk mengurangi risiko mereka? Saya pikir itu adil.

MV.
sumber
2
Saya pikir ini terasa seperti jawaban yang bagus. OP jelas tidak seharusnya hanya berguling, tetapi, di sisi lain, meminta kode sumber untuk proyek kustom tampak sangat masuk akal (dan saya telah melihat cukup banyak proyek yang dikontrak sepenuhnya keluar dari jalur dan perlu diselamatkan oleh seseorang selain itu saya mungkin tidak akan mempertimbangkan kontraktor yang menolak untuk menawarkan sumber, jika saya mencari).
Casey
11

Cara untuk menghadapinya adalah dengan bernegosiasi.

Jika mereka menginginkan kode sumber, maka mereka harus siap membayarnya, dan terserah Anda untuk memutuskan berapa banyak yang seharusnya.

Di sisi lain ... jika mereka tidak siap untuk membayar apa yang Anda inginkan, mereka dapat memutuskan untuk "membawa bisnis mereka ke tempat lain".

Selamat datang di dunia bisnis :-)


Dan ketika Anda berbicara dengan calon pelanggan di masa depan, pastikan untuk menyebutkan masalah ini sejak dini ... untuk menghindari pemborosan waktu semua orang.


Perlu juga dicatat bahwa apa yang Anda lakukan adalah laknat untuk pengembang open source, dan untuk pelanggan (berpendidikan) yang mencari solusi open source.

Stephen C
sumber
5
Pertama, ada jauh lebih banyak kemungkinan untuk lisensi daripada "yang mereka inginkan". Kedua, saya pikir sangat tidak adil bagi Anda untuk menyalahkan OP karena tidak "membicarakannya lebih awal" daripada perusahaan. Ini agak editorial. Ketiga, saya tidak melihat mengapa pengembang open source menghadapi kutukan jika mereka ingin bekerja pada proyek sumber tertutup. Keempat, jika perusahaan mencari solusi open source, mereka akan memintanya, bukan salinan kode sumber pribadi untuk keperluan mereka.
djechlin
1
@djechlin - 1) Saya tidak menyalahkan OP. Tetapi jika dia tidak siap untuk bernegosiasi tentang hal itu ... maka dia seharusnya << telah membawanya lebih awal. Ini adalah persyaratan yang jelas dan masuk akal bagi pelanggan berpengetahuan untuk perangkat lunak yang dipesan lebih dahulu. 2) "laknat" akan menjadi apa yang OP lakukan ... mencoba untuk memegang kode sumber. 3) Sementara, tidak ada indikasi bahwa pelanggan meminta open source (mungkin, mereka tidak benar-benar memahami manfaatnya) jelas bahwa >> do << menginginkan kode sumber, yang merupakan salah satu manfaat utama OSS .
Stephen C
3
Komentar ini tepat. Sebagai pengembang perangkat lunak sendiri, semua klien saya mendapatkan lisensi eksklusif untuk menggunakan dan memodifikasi perangkat lunak, dan saya memberi mereka kode sumber. Selain itu, saya memiliki hak untuk menggunakan kembali kode yang saya tulis di proyek lain, dan menggunakan kembali kode dari proyek lain di proyek ini. Ini menghemat uang dan waktu kita berdua. Tidak ada yang pernah punya masalah dengan itu.
dotancohen
1
@dotancohen: Saya harap mereka mendapatkan lisensi "non-eksklusif". Jika mereka memiliki lisensi eksklusif, Anda tidak dapat menggunakan kembali kode untuk pelanggan berikutnya. Anda tidak dapat memiliki dua pelanggan dengan lisensi "eksklusif" untuk kode yang sama.
gnasher729
Lisensi memungkinkan mereka untuk menggunakan dan memodifikasi kode, tetapi tidak membagikan, menjual, atau mendistribusikannya. Menjadi sebagian besar PHP berjalan pada VPS, tidak banyak yang bisa saya lakukan, atau mau lakukan, jika kode 'bocor'. Saya tidak melihatnya sebagai masalah besar di lapangan tempat saya bekerja.
dotancohen
5

Ini mungkin sudah terlambat untuk Anda, karena Anda mungkin telah menyetujui kontrak untuk melakukan ini, dan Anda bisa setuju untuk persyaratan yang saling tidak kompatibel dengan pelanggan yang berbeda.

Ada dua cara di mana Anda dapat memberikan kode sumber kepada pelanggan Anda. Kepemilikan hak cipta dan berlisensi.

Beberapa pelanggan akan menginginkan kepemilikan kode sumber. Ini berarti, pada akhir proses mereka akan membayar Anda dan Anda akan memberi mereka hak cipta dari kode yang Anda buat untuk mereka. Salah satu alasan untuk ini adalah jika mereka melihat potensi signifikan untuk kekayaan intelektual dalam kode sumber, dan mungkin ingin menilai ini di neraca perusahaan mereka. Dalam skenario ini, Anda tidak akan memiliki hak untuk terus menggunakan kode sumber untuk proyek lain, kecuali jika Anda juga mendapatkan lisensi dari pelanggan Anda yang memberikan Anda hak ini.

Jika pelanggan Anda membeli produk 'off the shelf' dari Anda sendiri, mereka akan mengharapkan untuk menerima lisensi untuk menggunakan perangkat lunak, bukan kepemilikan kode sumber. Mereka seharusnya mengharapkan bahwa Anda menjual perangkat lunak yang sama (atau serupa) kepada banyak organisasi lain, dan semoga mereka mendapat manfaat dari biaya pembelian yang lebih rendah karena basis pelanggan yang lebih luas.

Namun, situasi dalam pertanyaan ini adalah kesalahan dari keduanya.

Inilah yang ingin saya lakukan. Saya akan memberi pelanggan Anda lisensi untuk menggunakan (dan memodifikasi) kode bersama Anda. Jika ditanyai oleh pelanggan, saya akan tunjukkan bahwa ini adalah kode bersama yang telah Anda gunakan di banyak proyek dan ada tawaran saat ini untuk pekerjaan selanjutnya yang didasarkan pada Anda yang terus menggunakan pekerjaan ini. tunjukkan bahwa ini telah menghasilkan lebih sedikit waktu pada proyek ini untuk pelanggan Anda dan bahwa mereka telah membayar harga yang lebih rendah sebagai hasilnya. Seperti pustaka kode bersama lainnya yang digunakan oleh proyek, mereka memiliki lisensi untuk menggunakan kode ini, dan untuk memungkinkan tim pengembangan lainnya untuk mengembangkan ini, dan proyek-proyek lain berdasarkan pustaka ini. Namun, jika mereka lebih suka kepemilikan semua kode, Anda bersedia membuat pengganti, tetapi ini akan menjadi biaya tambahan.

Tergantung pada apa yang telah Anda komit sendiri, Anda mungkin harus menulis fungsionalitas penggantian secara gratis, atau memberikan kode sumber Anda.

Ingat, ada berbagai jenis perpustakaan. Perpustakaan Templat Standar di C ++ adalah contoh yang baik dari perpustakaan yang disertakan pada tingkat kode sumber dan dikompilasi ke dalam proyek yang dapat dieksekusi yang mungkin sangat mirip dengan bagaimana Anda telah menggunakan kode umum Anda.

Michael Shaw
sumber
1
Dari komentar ini : "Kontrak belum selesai, mereka setuju, tidak menandatangani dan kemudian kembali dengan klausul ini." - hanya dua hari yang lalu, saya berasumsi bahwa negosiasi masih berlangsung.
0

Jika Anda menggunakan pihak ketiga dengan perangkat lunak yang Anda kirimkan, kemungkinan besar Anda tidak memiliki kode sumber untuk pihak ketiga ini. Anda masih akan mengirimkan perangkat lunak ke perusahaan dengan binari pihak ketiga. Kode yang Anda kembangkan sebagai kerangka kerja yang dibagikan di semua proyek Anda persis seperti pihak ketiga meskipun dimiliki oleh Anda. Dalam hal ini, perusahaan memiliki risiko yang sama persis dengan biner kerangka kerja Anda daripada dengan pihak ketiga. Mengapa dalam hal ini Anda akan memberikan kepada perusahaan kode sumber kerangka kerja Anda. Anda dapat memberikan kepadanya dokumentasi API yang baik dengan perjanjian lisensi dan itu. Jika kode Anda berisi hal besar berikutnya yang akan merevolusi industri, ini adalah cerita lain tetapi umumnya tidak demikian.

Samuel
sumber