Khi làm phần mềm theo đơn đặt hàng, bạn không bắt buộc phải chọn giữa "giao hết" và "giữ hết": cách hợp lý với phần lớn lập trình viên tự do là chuyển nhượng phần mã viết riêng cho khách, và chỉ cấp quyền sử dụng không thời hạn cho phần thư viện, khung mã bạn dùng lại ở nhiều dự án. Hợp đồng không tách hai phần này ra là nguồn của hầu hết tranh chấp sau bàn giao.
Bài này đi qua tình huống của một lập trình viên làm website và ứng dụng cho doanh nghiệp nhỏ, giải thích từng lựa chọn, kèm bộ điều khoản bạn có thể đưa vào hợp đồng để khách yên tâm mà bạn không mất đồ nghề của mình. Phần giấy phép mã nguồn mở bên thứ ba chỉ nhắc ở mức người bàn giao cần biết.
Tình huống: chị Lan và bộ khung mã dùng cho mọi khách
Chị Lan nhận làm website bán hàng cho các cửa hàng nhỏ ở Hải Phòng (ví dụ giả định). Qua nhiều năm, chị xây được một bộ khung mã riêng: phần giỏ hàng, phần quản trị, phần kết nối cổng thanh toán. Mỗi khách mới, chị lấy bộ khung đó, viết thêm phần giao diện và tính năng riêng, rồi bàn giao.
Một khách sau khi nhận website đòi chị ký văn bản chuyển nhượng "toàn bộ mã nguồn" để họ nộp hồ sơ đăng ký quyền tác giả và gọi vốn. Nếu ký đúng như chữ, chị Lan chuyển luôn bộ khung dùng cho mọi khách khác cho một người. Nếu từ chối, khách nghi chị giữ lại gì đó để kiểm soát họ.
Tình huống này rất phổ biến, và cả hai bên đều có lý do chính đáng. Khách cần chắc chắn họ tự do sửa, mở rộng, thuê người khác bảo trì, bán lại doanh nghiệp mà không phụ thuộc chị. Chị Lan cần tiếp tục dùng bộ khung để làm cho khách khác. Hai nhu cầu này không mâu thuẫn nếu hợp đồng chia mã thành hai phần.
Chuyển nhượng và cấp phép khác nhau thế nào với mã nguồn
Theo Luật Sở hữu trí tuệ 2005 (sửa đổi, bổ sung 2009, 2019, 2022), chương trình máy tính được bảo hộ như tác phẩm. Bạn có thể chuyển nhượng quyền tài sản hoặc chỉ cho người khác sử dụng. Hai cách khác nhau ở những điểm thực tế sau.
| Điểm so | Chuyển nhượng | Cấp quyền sử dụng |
|---|---|---|
| Sau khi ký, ai là chủ sở hữu | Khách | Vẫn là bạn |
| Bạn còn dùng mã cho khách khác được không | Không, trừ khi khách cấp phép lại | Được, trừ khi giấy phép độc quyền |
| Khách sửa, mở rộng, thuê người khác bảo trì | Tự do | Được nếu giấy phép cho phép sửa đổi |
| Khách bán lại doanh nghiệp kèm phần mềm | Tự do | Cần giấy phép cho phép chuyển giao |
| Khách đăng ký quyền tác giả đứng tên chủ sở hữu | Được | Không, vì họ không phải chủ |
| Giá thường | Cao hơn | Thấp hơn hoặc theo kỳ |
Hợp đồng chuyển nhượng hay hợp đồng sử dụng quyền tác giả đều phải lập thành văn bản. Dù chọn cách nào, bạn vẫn là tác giả và giữ quyền đứng tên với phần mình viết.
Chia mã thành ba phần trước khi viết hợp đồng
Phần viết riêng cho khách. Giao diện theo thương hiệu khách, tính năng nghiệp vụ riêng của họ, cấu hình, dữ liệu mẫu. Phần này nên chuyển nhượng cho khách, vì nó vô dụng với người khác và là thứ khách trả tiền để có.
Phần đồ nghề của bạn. Bộ khung, thư viện tiện ích, mô-đun dùng lại bạn viết trước dự án hoặc viết để dùng chung. Phần này bạn giữ quyền sở hữu, và cấp cho khách quyền sử dụng không thời hạn, không độc quyền, được sửa đổi, được chuyển giao cùng phần mềm. Khách có mọi thứ cần để vận hành độc lập, bạn vẫn dùng được cho người khác.
Phần của bên thứ ba. Thư viện mã nguồn mở, mô-đun thương mại có giấy phép, phông chữ, biểu tượng. Phần này bạn không chuyển nhượng được vì không phải của bạn. Bạn liệt kê và để khách tuân thủ giấy phép của từng thành phần.
Tài sản vận hành. Tên miền, tài khoản máy chủ, tài khoản cổng thanh toán, kho mã. Đây không phải chuyện quyền tác giả nhưng hay bị lẫn vào. Nên đứng tên khách ngay từ đầu, bạn chỉ được cấp quyền quản trị.
Bộ điều khoản sở hữu trí tuệ gợi ý cho hợp đồng làm phần mềm
Những câu dưới đây diễn đạt nguyên tắc; hãy nhờ luật sư rà lại cho khớp hợp đồng của bạn và văn bản hiện hành.
- Định nghĩa: "Sản phẩm bàn giao" là mã nguồn, mã máy, tài liệu do bên làm viết riêng cho dự án. "Thành phần sẵn có" là mã do bên làm phát triển trước hoặc độc lập với dự án, liệt kê trong phụ lục. "Thành phần bên thứ ba" là mã có giấy phép của người khác, liệt kê trong phụ lục.
- Chuyển nhượng: quyền tài sản đối với sản phẩm bàn giao chuyển sang bên thuê kể từ khi thanh toán đủ.
- Cấp phép thành phần sẵn có: bên làm cấp cho bên thuê quyền sử dụng không thời hạn, không độc quyền, không phải trả thêm phí, được sửa đổi và chuyển giao cùng sản phẩm, trong phạm vi vận hành và phát triển sản phẩm này.
- Thành phần bên thứ ba: tuân theo giấy phép riêng; bên làm cam kết đã liệt kê đầy đủ và không đưa vào thành phần có giấy phép mâu thuẫn với việc sử dụng của bên thuê.
- Bàn giao: mã nguồn đầy đủ có thể biên dịch, hướng dẫn cài đặt, danh sách tài khoản và quyền truy cập.
- Ghi công: bên làm được giới thiệu dự án trong hồ sơ năng lực ở mức mô tả chung, không tiết lộ mã và dữ liệu.
- Cam kết nguyên gốc: phần do bên làm viết không sao chép trái phép của người khác.
Phụ lục liệt kê thành phần sẵn có là chỗ hay bị bỏ qua nhất, nhưng lại là chỗ bảo vệ bạn rõ nhất. Một danh sách tên mô-đun và mô tả ngắn, kèm thời điểm bạn viết, là đủ.
Khi khách cần giấy chứng nhận để gọi vốn
Quay lại khách của chị Lan: họ cần chứng minh với nhà đầu tư rằng công ty sở hữu phần mềm. Với cách chia ba phần, khách được chuyển nhượng phần viết riêng và có giấy phép không thời hạn cho phần sẵn có. Khi đăng ký quyền tác giả, khách đứng tên chủ sở hữu cho phần mềm của họ, chị Lan đứng tên tác giả, kèm hợp đồng chuyển nhượng; phần khung của chị được mô tả là thành phần được cấp phép.
Nhà đầu tư nghiêm túc thường hỏi đúng những câu này: phần mềm có thành phần nào không thuộc công ty không, giấy phép ra sao, có ràng buộc nào khi bán lại công ty không. Một hợp đồng chia rõ giúp khách trả lời nhanh, và họ sẽ cảm ơn bạn thay vì nghi ngờ.
Nếu khách vẫn muốn sở hữu cả bộ khung, đó là một giao dịch khác, giá khác. Bạn có thể bán, nhưng nên biết mình bán gì: sau khi chuyển nhượng, dùng lại bộ khung cho khách khác cần sự cho phép của người mua. Nhiều lập trình viên chọn cấp phép độc quyền theo ngành hoặc theo thời gian thay vì bán đứt.
Những sai lầm hay gặp khi bàn giao mã
Kinh nghiệm từ các tranh chấp sau bàn giao cho thấy vài lỗi lặp đi lặp lại:
- Không giao mã nguồn, chỉ giao bản đã chạy trên máy chủ, rồi dùng việc này để giữ khách. Cách này làm mất uy tín và có thể vi phạm hợp đồng nếu hợp đồng yêu cầu giao mã.
- Giao mã nhưng thiếu phần cấu hình, khoá, hướng dẫn, khiến khách không tự vận hành được.
- Để kho mã, máy chủ, tên miền đứng tên cá nhân lập trình viên, sau này khó tách.
- Đưa thư viện mã nguồn mở có điều kiện chia sẻ mã vào sản phẩm thương mại mà không báo khách. Khách chỉ biết khi bị hỏi lúc gọi vốn hoặc bán công ty.
- Dùng mã mẫu, đoạn mã chép từ diễn đàn mà không xem giấy phép.
- Chép phần mã viết riêng cho khách cũ sang dự án khách mới, trong khi phần đó đã chuyển nhượng.
Lỗi cuối cùng là lỗi dễ mắc nhất khi làm nhiều khách cùng ngành. Nếu một tính năng bạn muốn dùng lại, hãy viết nó thành thành phần sẵn có ngay từ đầu và ghi vào phụ lục.
Chuyển nhượng xong, bạn còn gì
Bạn vẫn là tác giả của phần mã mình viết và có quyền đứng tên. Bạn vẫn được giới thiệu dự án trong hồ sơ năng lực nếu hợp đồng cho phép. Bạn vẫn giữ kiến thức, kinh nghiệm, cách giải quyết bài toán, vì ý tưởng và phương pháp không phải đối tượng quyền tác giả. Điều bạn không còn là quyền sao chép chính đoạn mã đã chuyển nhượng.
Ranh giới giữa "dùng kinh nghiệm" và "chép mã" là chỗ cần tỉnh táo. Viết lại một tính năng tương tự cho khách mới bằng kiến thức của mình là bình thường. Mở kho mã khách cũ ra chép là chuyện khác. Mọi tình huống có tranh chấp cụ thể nên hỏi luật sư sở hữu trí tuệ.
Một thói quen giúp bạn yên tâm: mỗi dự án một kho mã riêng, và bộ khung dùng chung nằm ở một kho khác do bạn sở hữu, được kéo vào dự án như một thành phần. Khi cần chứng minh phần nào là của khách, phần nào là đồ nghề của bạn, cấu trúc kho mã tự nói lên điều đó.
Bảo trì sau bàn giao: bản sửa mới thuộc về ai
Sau khi bàn giao, nhiều khách tiếp tục thuê bạn bảo trì, thêm tính năng theo tháng. Mỗi lần sửa là một đoạn mã mới. Nếu hợp đồng bảo trì không nói gì, người ta lại quay về câu hỏi ban đầu. Cách gọn nhất là hợp đồng bảo trì dẫn chiếu thẳng điều khoản sở hữu trí tuệ của hợp đồng gốc: mã viết riêng trong thời gian bảo trì cũng chuyển sang khách khi thanh toán, thành phần sẵn có vẫn theo giấy phép cũ.
Trường hợp khách thuê một lập trình viên khác sửa tiếp, người mới chỉ làm việc trên phần khách sở hữu và phần được cấp phép. Họ không cần hỏi bạn, miễn giấy phép thành phần sẵn có cho phép sửa đổi và cho phép bên thứ ba làm thay khách. Đây là lý do câu "được sửa đổi và chuyển giao cùng sản phẩm" quan trọng: thiếu nó, khách bị trói vào bạn, và một ngày nào đó sẽ có tranh cãi.
Ngược lại, nếu bạn là người nhận bảo trì một hệ thống do người khác viết, hãy hỏi khách giấy tờ chuyển giao trước khi nhận. Bạn không muốn đầu tư công sức vào một sản phẩm mà khách thật ra không có quyền sửa.
Câu hỏi thường gặp
Làm website cho khách thì mã nguồn mặc nhiên thuộc về ai?
Nếu hợp đồng không nói gì, việc xác định khá phức tạp và phụ thuộc vào bản chất hợp đồng giao việc. Cách tránh tranh cãi là ghi rõ trong hợp đồng phần nào chuyển nhượng, phần nào chỉ cấp quyền sử dụng.
Có thể vừa chuyển nhượng cho khách vừa giữ thư viện dùng chung không?
Được. Bạn chuyển nhượng phần viết riêng cho khách và cấp quyền sử dụng không thời hạn cho phần thư viện sẵn có, liệt kê trong phụ lục. Khách vận hành độc lập, bạn vẫn dùng thư viện cho dự án khác.
Khách muốn đăng ký quyền tác giả phần mềm thì lập trình viên cần ký gì?
Thường cần hợp đồng chuyển nhượng quyền tài sản cho khách và giấy tờ xác nhận tác giả theo yêu cầu hồ sơ. Khách đứng tên chủ sở hữu, bạn đứng tên tác giả. Nên kiểm danh mục giấy tờ hiện hành với nơi nộp.
Không giao mã nguồn để giữ khách có được không?
Tuỳ hợp đồng, nhưng nếu hợp đồng yêu cầu giao mã mà bạn không giao thì là vi phạm. Kể cả khi hợp đồng không nói, cách làm này làm mất uy tín. Muốn giữ khách, hãy cung cấp dịch vụ bảo trì tốt thay vì giữ mã.
Sau khi chuyển nhượng, có được viết lại tính năng tương tự cho khách khác không?
Viết lại bằng kiến thức và kinh nghiệm của mình là được, vì ý tưởng và phương pháp không được bảo hộ. Điều không được làm là sao chép chính đoạn mã đã chuyển nhượng cho khách cũ.
Thư viện mã nguồn mở trong sản phẩm có cần báo cho khách không?
Cần. Mỗi thư viện có giấy phép riêng, một số đặt điều kiện về chia sẻ mã khi phân phối. Liệt kê trong phụ lục giúp khách tuân thủ và trả lời được câu hỏi của nhà đầu tư hay người mua công ty.