Tuần qua tôi lại có dịp ngồi với anh em developer đồng đạo nhân dịp đầu năm họp mặt. Bên trái tôi là một anh chàng developer trên nền tảng mã nguồn mở(anh chàng này đang “yêu” em WordPress) và bên tay phải tôi là một anh chàng – vì một lý do nào đó quyết định lục tung các mã nguồn mở lên để tìm hiểu cái hay, cái dỡ của mỗi anh rồi sau đó quyết định viết một bộ source riêng cho dự án của mình. Cuộc tranh luận giữa mã nguồn đóng và mã nguồn mở bắt đầu nổ ra khi anh chàng kia giới thiệu dự án của riêng anh với các anh em đồng đạo và nhận được câu trả lời: wordpress làm được tất cả rồi !
Ở đây, tạm thời tôi không bàn đến việc kĩ thuật viết của ai hay hơn, ai dỡ hơn. Nhân dịp đầu năm, tôi muốn cùng các bạn bàn bạc về một vấn đề muôn thuở: nên chọn mã nguồn đóng hay mã nguồn mở ?
Khi quyết định viết bài về chủ đề này, tôi cũng lường trước là sẽ có nhiều anh em developer nhảy vào tranh luận, nhưng mong anh em tranh luận trên cơ sở tìm ra câu trả lời tốt nhất chứ đừng nặng máu ăn thua, bảo vệ quan điểm của mình nhé !
Còn bây giờ, tôi xin đưa ra quan điểm của mình.
Phụ mục
Mã nguồn mở: con dao 2 lưỡi
– Miễn phí: đó là đặc tính của mã nguồn mở – bạn chẳng cần tốn một chút công sức nào cũng có thể dựng lên một website trong vòng 30 phút. Yeah !
– Đầu tiên, điểm giúp cho mã nguồn mở phát triển mạnh mẽ đó chính là nhờ nó được công khai nên tạo nên một cộng đồng lớn. Một cộng đồng gồm những người yêu thích và am hiểu về mã nguồn mà bạn vừa download chính là vũ khí tối tượng giúp bạn tự tin khi bắt tay làm việc với mã nguồn mở này. Bạn không hiểu ? Đã có cộng đồng hỗ trợ. Đối với những open source phổ biến hiện nay như Joomla, WordPress, Drupal… có lẽ là không quá khó khăn để bạn tìm thấy lời giải đáp cho bất kì câu hỏi nào có liên quan trong mọi ngóc ngách. Bạn chỉ cần Google – thế là xong.
– Một ưu điểm nữa của mã nguồn mở đó là tốc độ cập nhật phiên bản, khả năng fix lỗi được kiểm chứng bởi cộng đồng. Những bản vá lỗi thường xuyên được cập nhật giúp cho bạn – cho dù không phải là một người làm về vấn đề bảo mật cũng có thể yên tâm phần nào.
Tuy nhiên, một khi đã nói về mặt mạnh, tôi cũng xin chia sẻ một vài khuyết điểm mà theo tôi là yếu điểm của mã nguồn mở:
– Nỗi đau đầu thứ nhất: cập nhật phiên bản. Nếu bạn sử dụng một source “nguyên tem” thì chuyện cập nhật phiên bản chẳng ảnh hưởng gì nhiều đến “hòa bình thế giới” của bạn. Nhưng nếu bạn là một developer chính hiệu hay là một “vọc sĩ” thì chắc chắn bạn không bao giờ để yên cho cái web của bạn hoạt động. Hoặc dĩ bạn cần phát triển dự án theo ý khách hàng bạn sẽ sẽ phải đào sâu, chỉnh sửa code trong chính mã nguồn này để đáp ứng được công việc mong muốn. Lúc này, việc cập nhật phiên bản sẽ trở nên rất mất thời gian và tốn công sức, thậm chí là bất khả thi vì bạn chẳng nhớ mình đã thay đổi những gì viết thêm những tính năng nào, phiên bản mới của mã nguồn mở (open source) liệu có hỗ trợ những gì bạn đã viết hay không…Lúc này, bạn chỉ muốn tắt điện thoại và … kệ nó. Nhưng nếu phiên bản mới đòi hỏi bạn phải cập nhật để vá các lỗ hổng bảo mật ? Câu trả lời tôi để dành cho bạn.
– Nỗi đau thứ hai: sống chung với lũ. Ở phần trên tôi đã nói với bạn về khả năng cập nhật và vá lỗi nhanh chóng của các ứng dụng mã nguồn mở nhờ cộng đồng. Tuy nhiên, không phải lúc nào mã nguồn của bạn cũng có thể thoát khỏi những nguy hiểm rình rập. Bạn sử dụng Open Source nghĩa là ai cũng có thể có mã nguồn tương tự bạn, và nếu họ phát hiện ra một lỗ hổng liên quan đến bảo mật chưa được cập nhật và lợi dụng nó để tấn công bạn ? Thực tế mà tôi biết, giới UG (những hacker mũ đen) thường biết và nắm được các thông tin liên quan đến mã nguồn từ rất sớm; có khi trước khi có bản vá lỗi vài tháng trời do họ không thông báo cho bộ phận chịu trách nhiệm vá lỗi mà lợi dụng lỗi để trục lợi. Hoặc có thể là đã có bản cập nhật mới nhưng vì một lý do nào đó mà bạn chưa kịp cập nhật. Trường hợp của Joomla 1.5 ngày xưa là một ví dụ điển hình.
– Nỗi đau thứ ba: tùy biến. Thật không dễ dàng gì để khiến một mã nguồn chuyên làm việc này phải gánh thêm công việc của những mã nguồn mở khác. Bởi mỗi mã nguồn mở được thiết kế ra nhằm đáp ứng nhu cầu của một lớp đối tượng nào đó, để phục vụ một nhóm đối tượng khác hoặc một nhu cầu mở rộng hơn, bạn phải viết thêm mã lập trình là một chuyện, đảm bảo hệ thống hoạt động trơn tru, giữ được cái hồn của mã nguồn cũ sẽ rất khó.
Mã nguồn đóng: ếch ngồi ở …
– Mã nguồn đóng: bạn phải học rất nhiều. Nếu bạn làm việc trên mảng web, bạn sẽ phải học CSS, HTML rồi đến cấu trúc 3 tầng, PHP(hoặc ASP, ASP.NET), học về database như MySQL, SQL Server… để có thể cấu trúc được mã nguồn của bạn, đó là chưa nói về network, vấn đề bảo mật….
– Đối với mã nguồn đóng, thuận lợi lớn nhất của nó chính là bạn không hề tiếc lộ mã nguồn của mình cho một đơn vị nào khác nên những người khác ngoài việc lợi dụng lỗi nhập liệu (trong quá trình tương tác với website) sẽ rất khó phát hiện ra. Do đó, bạn có thể hạn chế được một phần rủi ro mà mã nguồn mở mắc phải: vạch áo cho người xem lưng và dĩ nhiên bạn có thể dễ dàng tùy biến theo những gì bạn muốn một cách dễ dàng.
Tuy nhiên, cũng chính vì không có sự chung tay tương tác của nhiều người nên việc một mình bạn (hoặc team của bạn) làm việc độc lập, duy ý chí sẽ khiến cho bạn khó hoặc không thể tự thân mình phát hiện ra lỗi để sửa chữa, nâng cấp, tùy biến thường xuyên. Thực tế này khiến cho nhiều website được viết dạng đóng chứa lỗi bảo mật rất nhiều và hầu như site nào “made by tự tui” cũng dính ít nhất vài ba lỗi.
Kết luận của tôi
Đóng hay mở tôi thấy chẳng quan trọng, quan trọng là nó phục vụ nhu cầu của người sử dụng nó như thế nào. Thế nên, đôi lúc tôi vẫn sử dụng mã nguồn mở, đôi lúc tôi hí hoáy viết lại một source mới hoàn toàn để tùy biến cho dễ trong tương lai và phục vụ nhu cầu phát triển lâu dài. Tôi không biết bạn thế nào, nhưng tôi thích thế :D