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.
sumber
Jawaban:
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.
sumber
"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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber