Phần mềm mang dòng máu lạnh
- Năm 2004, khi đang học một lớp lịch sử tự nhiên, tác giả vốn là sinh viên ngành khoa học máy tính đã được giáo sư cho xem một con rùa sơn non bị đông lạnh.
- Đây là một trong số ít loài có thể sống sót trong trạng thái đóng băng, là động vật máu lạnh có khả năng điều tiết quá trình trao đổi chất ở nhiệt độ thấp.
- Việc quan sát con rùa dần dần cử động và hồi sinh trong suốt buổi học đã giúp tác giả hiểu sâu hơn về động vật máu lạnh.
Sự lưỡng phân của các dự án phần mềm
- Các dự án phần mềm cũng có thể được chia thành dự án máu nóng và máu lạnh.
- Dự án máu nóng đòi hỏi hoạt động liên tục, và khi hoạt động dừng lại thì vấn đề sẽ phát sinh.
- Dự án máu lạnh vẫn có thể tái khởi động ngay từ trạng thái trước đó ngay cả khi đã ít hoạt động trong một thời gian.
Phần mềm máu lạnh của blog
- Phần mềm vận hành blog của tác giả là phần mềm máu lạnh.
- Dự án này được bắt đầu từ 12 năm trước, đơn giản, không phụ thuộc vào dịch vụ bên ngoài, và mọi phụ thuộc đều được chứa trong kho lưu trữ của dự án.
- Ngoài một vài cải tiến nhỏ, nó vẫn hoạt động tốt mà gần như không cần sửa đổi, và được kỳ vọng sẽ còn tiếp tục chạy thêm 12 năm nữa.
Ý kiến của GN⁺
- Khái niệm phần mềm máu lạnh có ảnh hưởng quan trọng đến tính bền vững và khả năng bảo trì của dự án.
- Bài viết này mang lại góc nhìn về cách lựa chọn tech stack ảnh hưởng đến sức sống của một dự án.
- Kinh nghiệm của tác giả đem lại bài học cho các lập trình viên về cách xây dựng các hệ thống ổn định trong dài hạn.
1 bình luận
Ý kiến Hacker News
Trong hệ sinh thái Node và JavaScript có framework web Express. Nhánh phiên bản chính hiện nay là 4.x.x đã tồn tại hơn 10 năm và được tải xuống hơn 17 triệu lần mỗi tuần. Dù thiếu một số tính năng và hiệu năng không phải tốt nhất, nhiều lập trình viên vẫn ưa chuộng vì nó cho phép phát triển nhanh và ổn định, đồng thời có thể lập kế hoạch dài hạn mà không phải lo thay đổi API hay thiếu bản vá bảo mật. Ngôn ngữ Go mang lại sự ổn định còn tốt hơn nhờ thư viện chuẩn phong phú và cam kết tương thích, đến mức các chương trình hơn 10 năm tuổi vẫn có thể chạy được.
Khi phần mềm hoạt động tốt mà không cần cập nhật, điều đó có nghĩa là nó đã được làm đúng ngay từ đầu. Với phần mềm dùng cho cá nhân, điều này tương đối dễ vì sở thích không thay đổi nhiều. Nhưng khi viết phần mềm cho người khác sử dụng, yêu cầu có thể khác nhau và những vấn đề không lường trước có thể phát sinh. Ví dụ, có thể xảy ra lỗi crash khi xử lý tệp lớn, và để sửa có khi phải viết lại một nửa phần mềm. Đây là phản biện lớn nhất đối với lập luận cho rằng phần mềm ít thay đổi thì nhất định tốt hơn.
Python là ví dụ không tốt vì thường xuyên có các thay đổi phá vỡ khả năng tương thích. Ngược lại, Go và Java cho phép mã 10 năm tuổi vẫn hoạt động tốt với công cụ hiện đại. Perl là ví dụ còn tốt hơn, vì mã 30 năm tuổi vẫn chạy ổn.
Đang làm việc với mainframe IBM (z/OS). IBM là hãng xuất sắc nhất về duy trì tương thích ngược. Microsoft (Windows) đứng thứ hai, còn ABI của Linux (kernel) đứng thứ ba. Phần lớn các hệ thống khác gặp vấn đề này, vốn rất phổ biến trong OSS, nơi người ta không muốn dành thời gian để duy trì tương thích.
Dependency có thể khiến ứng dụng trở thành loại 'máu nóng', nhưng Docker hay việc container hóa có thể giải quyết phần nào các vấn đề này. Khi chọn thư viện cho dự án, họ nghiên cứu kỹ để chọn thư viện thuộc loại 'máu lạnh'.
Nhiều kỹ sư khi tìm thư viện trên GitHub thường kiểm tra thời điểm commit cuối cùng. Họ cho rằng commit càng gần đây thì càng được hỗ trợ tốt. Nhưng việc tìm được một dự án đã lưu trữ, ổn định lâu dài và không có lỗi giống như tìm thấy viên ngọc ẩn trong cửa hàng đồ cũ.
Đang bảo trì side project của mình. Bắt đầu từ 12-13 năm trước và đã viết lại bằng PHP, Laravel, Symfony. Đây là trải nghiệm rất đáng giá để học cách duy trì dự án trong thời gian dài. Ví dụ, đã tìm cơ hội chuyển từ Vagrant sang Docker, và đơn giản hóa từ Vue + Axios + Webpack sang Htmx. Gần đây còn nâng cấp lên PHP 8.2 và Symfony 7, đồng thời tích hợp các tính năng dựa trên ChatGPT.
Đã chán ngấy việc các ứng dụng di động trong vài năm gần đây cứ cần vài giờ vá lỗi. Tác giả mô tả trình tạo trang tĩnh của mình là loại 'máu lạnh', nó chạy trên Python 2, nhưng việc cài Python 2 đang ngày càng khó hơn.
Bộ SDK viết trong giai đoạn 1994-95 vẫn được sử dụng cho đến khi rời công ty vào năm 2017. Nó được viết bằng ANSI C, và những thứ viết bằng PHP(5) cũng vẫn hoạt động tốt trên PHP 8.2. Tuy nhiên, những thứ này khá tẻ nhạt và không có nhiều độ nóng về mặt chủ đề.
Ngoài những điều bài viết đề cập, việc có một mô hình đe dọa an toàn ngay từ bản chất cũng rất quan trọng. Ví dụ, toàn bộ website phải liên tục đối phó với kẻ tấn công, bot spam, v.v., nên về bản chất là loại 'máu nóng'. Trong khi đó, các trang tĩnh như Tiddlywiki tốt hơn nhiều vì không cần đưa lên web và trình duyệt là một nền tảng rất ổn định.