Bài viết được dịch từ trang web Lifehacker

Những yếu tố nào đã tạo nên thành công của phần mềm FileZilla?
Những yếu tố nào đã tạo nên thành công của phần mềm FileZilla?

Trong số các ứng dụng mà tôi luôn luôn tải về khi lần đầu tiên thiết lập một chiếc máy tính mới đó là FileZilla, thật khiêm nhường thay nó là một ứng dụng FTP client mã nguồn mở. Đối với những người chuyên phải chạy những trang web nhỏ của riêng mình như chúng ta thì từ lâu nó đã trở thành một công cụ không thể thiếu trong bộ đồ nghề của mình.

Tôi không thể không cảm thấy bồi hồi khi sử dụng FileZilla. Nó nhắc cho tôi nhớ lại khoảng thời gian trước đây khi tôi còn là một đứa trẻ và đang thử viết code HTML để có thể đăng những tấm hình đẹp và các ảnh động GIF lên mọi trang web mà tôi sở hữu. Và một khi phần code đã hoàn thành thì đó là lúc để bật phần mềm FTP và tải các file lên server, đó là bước cuối cùng trong việc xuất bản. Ngày nay hầu hết các trang web có thể được thiết kế hoàn toàn và duy trì trong một trình duyệt web, nhưng tôi vẫn giữ FileZilla để làm việc với những dự án của riêng mình.

Thế thì bạn có bao giờ thắc mắc rằng ứng dụng FileZilla đã được tạo ra như thế nào không? Thực ra nó là một dự án tại trường học. Chúng tôi đã nói chuyện với lập trình viên Tim Kosse về lý do tại sao và cách thức mà anh ta đã tạo ra FileZilla khoảng 15 năm về trước.

Liệu có phải là FileZilla thực sự bắt đầu là một dự án tại trường học? Lúc đó anh đang cố gắng giải quyết một vấn đề mà anh đã có kinh nghiệm với các phần mềm hiện có, hay là nguồn cảm hứng đó đã đến từ một nơi nào khác?

Vâng, nó bắt đầu là một dự án nhóm trong khóa học về khoa học máy tính ở năm cuối cùng của tôi tại đại học, khoảng 15 năm về trước. Lúc đó chúng tôi đang tìm kiếm một cái gì đó có thể sử dụng mà không phải là quá tầm thường và cũng không quá lớn để thực hiện và có thể làm việc cùng nhau. Đáng buồn là tôi không thể nhớ những chi tiết về làm thế nào mà cuối cùng chúng tôi lại chọn làm một ứng dụng FTP client.

Sau khi anh đưa ra ý tưởng đó, các bước tiếp sau đó là gì?

Đó là tìm ra cách để thực hiện thiết lập các tính năng cơ bản nhất mà mọi phần mềm FTP client cần có: Kết nối tới một máy chủ, liệt kê ra danh sách các thư mục và dĩ nhiên là upload và download các file.

Đối với phần thiết kế giao diện thì chúng tôi đã bắt chước cách bố trí cơ bản của những phần mềm FTP client dạng đồ họa mà chúng tôi biết. Đối với các chức năng hỗ trợ thì chúng tôi đã sử dụng một số class FTP của bên thứ ba (third-party).

Sau khi dự án đó chính thức kết thúc, tôi tiếp tục làm việc trên nó, một phần bởi vì tôi có thể sử dụng một phần mềm FTP client tốt do chính mình tạo ra. Dần dần tôi đã bổ sung thêm các tính năng và sửa các lỗi khi chúng xuất hiện. Sau đó tôi cũng đã bắt đầu xây dựng FileZilla Server để bổ sung cho phần mềm client đó.

Anh đã chọn những nền tảng nào để nhắm đến và lờ đi hoặc bỏ qua nền tảng nào?

Ban đầu FileZilla chỉ dành cho Windows, nó là nền tảng duy nhất mà chúng tôi có đủ kinh nghiệm khi bắt đầu làm dự án đó. Tuy nhiên tại một số thời điểm tôi đã muốn mở rộng sang những nền tảng khác và đặc biệt là Linux. Thật không may vì ban đầu chúng tôi đã lựa chọn sử dụng MFC của Microsoft làm thư viện GUI, nên việc hỗ trợ các nền tảng khác đồng nghĩa với việc phải viết lại hoàn toàn.

Đầu năm 2004, cuối cùng tôi cũng quyết định viết lại FileZilla từ đầu, vì phần code cũ đã trở nên ngày càng khó khăn để duy trì và bổ sung thêm các tính năng mới mà không có nguy cơ gây hỏng hết toàn bộ hệ thống.

Sau khi tiến hành một số nghiên cứu, cuối cùng tôi đã sử dụng thư viện wxWidgets và bắt đầu viết lại vào tháng 3 năm 2004, mà đỉnh cao là việc phát hành phiên bản FileZilla 3.0.0 ‘chỉ' 3,5 năm sau đó. Không phải là do tôi đã đánh giá thấp sự phức tạp của việc phát triển đa nền tảng, mà trong suốt thời gian đó tôi vẫn phải duy trì các phiên bản cũ cho đến khi hai phiên bản có tính năng tương đương. Hơn nữa tôi vẫn phải duy trì việc cải tiến FileZilla Server trong suốt thời gian này. Tuy nhiên, việc viết lại đó là một thành công.

Rào cản lớn nhất mà anh đã gặp phải là gì và anh đã vượt qua nó như thế nào?

Nó giống như một bộ sưu tập vô tận của những chướng ngại không đáng có đã cản trở công việc phát triển của tôi.

FTP là một giao thức khá cũ với rất nhiều lịch sử và các chức năng di sản. Có một số phần trong FTP được quy định rất chi tiết trong khi những phần khác thì lại ở tình trạng không xác định. Không phải là lúc nào bạn cũng đạt được cùng một thứ trong FTP, các phần mềm FTP khác nhau hỗ trợ và sử dụng các tính năng khác nhau.

Ngoài ra, việc FTP sử dụng các kết nối riêng biệt cho các lệnh điều khiển và truyền dữ liệu làm cho nó khó sử dụng phía sau các firewall và NAT router, đó là một thách thức lớn cần phải vượt qua.

Điều này dẫn đến một số vấn đề khá thú vị: ví dụ một máy chủ có thể không thực hiện chính xác một chức năng nào đó hoặc một firewall phía trước máy chủ đó đã chặn mất một số lệnh. Hơn nữa, FileZilla có thể là client duy nhất sử dụng lệnh đó. Kết quả là, FileZilla không thể được sử dụng để trao đổi các file với một máy chủ như vậy.

Điều này thường xuyên xảy ra mỗi lần mà tôi tạo ra một tính năng FTP bổ sung hoặc thay đổi cách thức mà FileZilla hoạt động. Trong những tình huống này, tôi đã dành rất nhiều thời gian và nỗ lực để xác định nguyên nhân gốc của vấn đề. Khi điều này xảy ra trong phần mềm FTP mã nguồn mở khác thì tôi thường viết một bản vá để sửa chữa vấn đề đó.

Đáng buồn thay nó thường xảy ra với các máy chủ, firewall và NAT router độc quyền, nơi tôi không thể làm bất cứ điều gì để sửa nó được cả, do đó các nhà cung cấp tương ứng phải giải quyết vấn đề đó. Đó chính xác là nơi tạo ra rào cản lớn nhất cho tôi: Làm thế nào để thuyết phục những người khác rằng vấn đề đó là do một thành phần của bên thứ ba (third-party), đặc biệt là trớ trêu thay nó lại làm việc với những ứng dụng FTP client khác hoặc một phiên bản trước đó của FileZilla?

Trong khi tôi có thể thực hiện một cách giải quyết tạm thời trong những trường hợp này, nhưng thường đi kèm với nhiều tốn kém và thêm rất nhiều phức tạp. Hơn nữa, vấn đề cơ bản đó vẫn chưa được giải quyết triệt để.

Vì vậy tôi đã thực hiện một quyết định quan trọng: tôi sẽ không thực thi bất cứ giải pháp tạm thời nào nếu nó sẽ làm tổn hại đến tính bảo mật hoặc hiệu suất. Trong khi FileZilla không yêu cầu một máy chủ phải hỗ trợ những tính năng tùy chọn, nếu máy chủ đó nói rằng nó hỗ trợ một tính năng đặc biệt nào đó thì FileZilla hy vọng rằng máy chủ đó sẽ xử lý nó một cách chính xác. 

Chắc chắn là tại một số thời điểm người dùng có thể sẽ bị ảnh hưởng bởi sự bất tiện, đặc biệt là nếu các nhà cung cấp máy chủ hoặc firewall không thừa nhận hoặc không muốn sửa chữa vấn đề đó. Tuy nhiên, tôi luôn tin tưởng mạnh mẽ rằng việc giải quyết nguyên nhân gốc rễ của một vấn đề là cách làm đúng đắn nhất.

Mọi người có rất nhiều tùy chọn khi chọn sử dụng phần mềm FTP; những tính năng nào là quan trọng đối với anh khi thiết kế FileZilla?

Trước khi quyết định thực hiện một tính năng mới trong FileZilla tôi xem xét liệu một FTP client dạng đồ họa có là công cụ hợp lý dành cho tác vụ đó hay không. Có rất ít giá trị trong việc thực thi một tính năng mà sẽ phù hợp hơn với các loại chương trình khác. Một ví dụ đó là việc tự động hóa và scripted transfer, tôi nghĩ rằng nó sẽ phù hợp hơn cho một ứng dụng client command-line đơn giản.

Sau khi đã quyết định thực hiện một tính năng mới, có hai điểm chính cần cân nhắc trong thiết kế để hướng dẫn việc thực thi tính năng mới đó trong FileZilla.

Đầu tiên là độ tin cậy. Mỗi tính năng cần phải hoạt động như đã được giới thiệu trong tất cả các kịch bản sử dụng có thể có. Ngoài ra tôi cũng xem xét tính bảo mật như là một khía cạnh của độ tin cậy: Một lỗ hổng bảo mật có thể được xem như là phần mềm đó đã làm nhiều hơn những gì mà nó có ý định làm. Hay nói cách khác, người dùng có thể dựa vào FileZilla để làm chính xác những việc mà nó dự định để làm, không hơn, không kém.

Các khía cạnh thứ hai đó là hiệu suất và khả năng mở rộng. Đương nhiên FileZilla nên càng nhanh càng tốt, không ai thích phải chờ đợi lâu hơn mức cần thiết khi thực hiện một tác vụ nào đó. Khi thực hiện một tính năng, tôi luôn luôn xem xét những gì sẽ xảy ra nếu ai đó sử dụng nó đến mức tới hạn. Ví dụ hầu hết người dùng có lẽ chỉ sử dụng ở mức vài ngàn file là cùng, nhưng FileZilla đã được thiết kế để xử lý các thư mục chứa hàng triệu file có dung lượng lên đến vài terabytes.

Sau khi FileZilla đã sống vượt ra ngoài mục đích học tập của nó, và việc trở thành sản phẩm ứng dụng thực tế có ý nghĩa như thế nào đối với anh? Tôi đoán rằng nó là dạng "hòn tuyết lăn", ngày càng có nhiều người sử dụng nó theo thời gian.

Vâng, việc phát hành phiên bản đầu tiên được tiến hành rất lặng lẽ. Tôi đã đăng ký một dự án mới trên SourceForge, thiết lập các mô tả về dự án, và tải phiên bản đầu tiên lên.

Cuối cùng, những người dùng đầu tiên đã thử FileZilla và gửi những thông tin phản hồi có giá trị. Tôi đã tiếp tục cải tiến FileZilla và cứ dựa vào phản hồi của người dùng để cải tiến qua mỗi phiên bản phát hành. Tôi chưa bao giờ mong đợi sự thành công này nhiều, nhưng nó giữ cho tôi động lực để tiếp tục làm việc với dự án đó. Vào năm 2001 có ai đó đã nói với tôi rằng tôi sẽ có hàng triệu người dùng trong tương lai, lúc đó tôi đã gọi anh ta là thằng điên.

Một điểm thú vị: Các phiên bản đầu tiên từ năm 2001 vẫn hoạt động tốt trên một máy tính chạy hệ điều hành Windows 10.

Có bao giờ anh nghĩ đến việc bán hoặc kiếm tiền từ nó bằng cách nào đó hay không?

Tôi chưa bao giờ xem xét việc bán FileZilla là một lựa chọn khả thi. Sau tất cả, FileZilla là một phần mềm mã nguồn mở miễn phí, việc phân phối lại nó thì không những được cho phép mà còn được khuyến khích nữa là đằng khác.

Tuy nhiên tôi hiện đang tham gia vào chương trình hợp tác DevShare của SourceForge để tạo ra doanh thu. Tôi biết rằng một số người dùng phản đối việc đưa ra những lời mời chào đi kèm, vì vậy tôi đã cho phép tất cả người dùng quyền tự do lựa chọn, việc sử dụng các trình cài đặt đi kèm là hoàn toàn tùy chọn.

Làm thế nào để anh có thể xử lý các yêu cầu và chỉ trích của người dùng một cách hiệu quả?

Phản hồi của người dùng có thể được chia thành 3 loại: báo cáo vấn đề, yêu cầu tính năng và các yêu cầu giúp đỡ chung.

Báo cáo về các vấn đề thì được tôi xem xét ngay lập tức. Nếu nó đúng là một lỗi trong FileZilla thì nó có khả năng sẽ được sửa trong phiên bản phát hành kế tiếp.

Tôi nhận thấy điều quan trọng là phải duy trì một tầm nhìn sản phẩm chặt chẽ, vì vậy các yêu cầu tính năng sẽ được xử lý khác nhau. Nhiều tính năng nằm ngoài tầm nhìn của sản phẩm, và việc thực hiện chúng sẽ nhanh chóng đưa FileZilla chệch hướng khỏi tầm nhìn đó. Chính điều này đã giúp lọc bỏ bớt các yêu cầu tính năng không phù hợp. Phần còn lại được đánh số theo thứ tự ưu tiên và được sắp xếp vào một danh sách các tính năng yêu cầu để chúng có thể được thực hiện tại một thời điểm nào đó.

Đối với các yêu cầu nhờ giúp đỡ chung chung, vì tôi không thể có đủ thời gian để trả lời từng câu hỏi của người dùng, nên diễn đàn FileZilla là một nơi rất tốt để cho người dùng có thể giúp đỡ lẫn nhau.

Hiện nay anh đang phân chia thời gian giữa việc phát triển các tính năng mới và quản lý những cái hiện có như thế nào?

Tôi luôn luôn phấn đấu có một chút cho cả hai mặt này trong mỗi phiên bản phát hành mới. Trung bình tôi muốn nói rằng 2/3 thời gian phát triển của tôi là dành cho việc thực hiện các tính năng mới.

Tuy nhiên gần đây tôi đã dành rất nhiều thời gian vào việc cải thiện kiến trúc của nó, hiện đại hóa và làm sạch phần lớn code base. Trong khi FileZilla trông vẫn giống như cũ, nhưng thực ra đã có rất nhiều thay đổi phía trong lõi của nó. Điều đó không chỉ giúp cải thiện đáng kể hiệu suất của FileZilla, mà nó cũng giúp việc thực hiện những tính năng mới trong tương lai được dễ dàng hơn.

Anh có lời khuyên nào dành cho những ai muốn tiến hành một dự án tương tự?

Hãy kiên trì và duy trì một tầm nhìn sản phẩm sắc nét. Phát hành sớm và phát hành thường xuyên để tìm ra nơi mà bạn cần tập trung vào cải tiến hoặc có thể mở rộng. Cuối cùng nhưng không kém phần quan trọng, là bạn hãy sử dụng sản phẩm mà chính bạn đã tạo ra.