7 điểm bởi baeba 3 giờ trước | 4 bình luận | Chia sẻ qua WhatsApp

Bí quyết thành công suốt 26 năm mà nhà sáng lập SQLite tiết lộ là tự xây những công cụ mình cần, hạn chế tối đa đóng góp từ bên ngoài và duy trì chất lượng mã nguồn bằng kiểm thử cực kỳ nghiêm ngặt.
Điều này cho thấy bản chất của “tự do” thường bị bỏ qua trong hệ sinh thái mã nguồn mở phức tạp.


Mục lục

  1. Hành trình 26 năm viết code của Richard Hipp, người sáng lập SQLite


1. Hành trình 26 năm viết code của Richard Hipp, người sáng lập SQLite

Richard Hipp, người sáng lập SQLite, đã thực hành những triết lý sau trong hành trình phát triển mã nguồn suốt 26 năm.

  • Tự phát triển những công cụ mình cần.
  • Hạn chế tối đa đóng góp mã từ bên ngoài.
  • Duy trì chất lượng mã bằng kiểm thử cực kỳ nghiêm ngặt.
  • Giảm phụ thuộc bên ngoài để đảm bảo tự do trong phát triển.

1.1. Sự ra đời của SQLite: giải quyết vấn đề bắt đầu từ tàu chiến

SQLite khởi đầu từ một dự án tàu chiến

  • SQLite bắt đầu từ công việc hợp đồng liên quan đến tàu chiến USS Oscar Austin.
  • Khi đó Richard Hipp là nhà thầu của General Dynamics và tham gia dự án đóng tàu DDG-79 tại Bath Iron Works.
  • Đã phát sinh vấn đề trong quá trình phát triển hệ thống thông tin kiểm soát hư hại của con tàu.
  • Một công ty khác đã đầu tư hàng triệu USD nhưng vẫn không tạo ra được kết quả ra hồn.

Giới hạn của các hệ thống cơ sở dữ liệu hiện có

  • Richard Hipp đã phát triển một phần mềm nhanh dựa trên heuristic để giải quyết vấn đề của hệ thống kiểm soát hư hại.
  • Nhưng nếu engine cơ sở dữ liệu Informix dùng để lưu dữ liệu bị dừng thì phần mềm cũng ngừng hoạt động theo.
  • Phần mềm cần phải tiếp tục chạy ngay cả khi quản trị viên hệ thống đã tắt engine cơ sở dữ liệu.
  • Vì vậy, ông bắt đầu nghĩ đến cách để ứng dụng đọc trực tiếp dữ liệu trên đĩa mà không cần một tiến trình cơ sở dữ liệu riêng biệt.
  • Khi đó rất khó tìm được một SQL database engine đáp ứng yêu cầu như vậy, nên ông phải tự phát triển.

Tự học nghiên cứu cơ sở dữ liệu quan hệ

  • Khi ấy, tìm kiếm trên Internet chưa phổ biến như bây giờ.
  • Richard Hipp đã tìm tài liệu tại thư viện đại học địa phương để nghiên cứu công nghệ cơ sở dữ liệu quan hệ.
  • Vào thời điểm đó, MIT, Harvard, Berkeley và nhiều nơi khác đang nghiên cứu rất sôi nổi về cơ sở dữ liệu quan hệ.
  • Nhưng vì hạn chế về địa lý, ông không dễ tiếp cận các thông tin nghiên cứu mới nhất.
  • Cuối cùng, ông đã tự nghiên cứu và tự triển khai công nghệ cơ sở dữ liệu cần thiết.

1.2. Sự phát triển và thành công thương mại của SQLite

Một dự án ban đầu không nhằm mục tiêu doanh thu

  • SQLite không phải là phần mềm được phát triển với mục tiêu kiếm tiền ngay từ đầu.
  • Các phiên bản đầu tiên được phát hành như phần mềm miễn phí.
  • Vào thời điểm phát triển, ông không có kế hoạch làm kinh doanh hay kiếm doanh thu từ nó.

Hợp đồng thương mại đầu tiên với Motorola

  • Vài năm sau khi SQLite được công bố, Motorola đã liên hệ.
  • Motorola muốn tích hợp SQLite vào điện thoại di động của mình.
  • Đây là cột mốc dẫn đến hợp đồng thương mại đầu tiên của SQLite.
  • Hợp đồng được thực hiện theo mức giá cố định thay vì cấp phép theo mức sử dụng.

Hợp tác với AOL

  • Sau đó, America Online (AOL) cũng ký hợp đồng để đưa SQLite vào gói CD-ROM của mình.
  • Hợp đồng này cũng theo mô hình giá cố định.
  • Richard Hipp đánh giá số tiền hợp đồng khi đó tương đối rẻ so với giá trị của SQLite.

Symbian OS chọn SQLite

  • Symbian OS, từng được dùng trên điện thoại của Nokia và nhiều hãng khác, đã tiến hành một bài kiểm thử mù để chọn database engine.
  • Tổng cộng có 10 database engine được đưa vào đánh giá.
  • Kết quả là SQLite được chọn cuối cùng.
  • Trong quá trình đó, có ý kiến cho rằng SQLite phụ thuộc quá nhiều vào một nhà phát triển cốt lõi duy nhất.
  • Họ đề xuất thành lập một consortium để tăng bus factor.

Bus factor
Đây là chỉ số cho biết liệu dự án có thể tiếp tục được duy trì hay không nếu một vài nhân sự chủ chốt đột ngột không còn khả năng làm việc.
Bus factor bằng 1 có nghĩa là chỉ cần một nhà phát triển cốt lõi rời đi thì dự án có thể rất khó duy trì.

Thành lập consortium và phát triển toàn thời gian

  • Mitchell Baker của Mozilla đã tư vấn về việc thành lập consortium.
  • Dựa trên đó, SQLite Consortium được thành lập.
  • Sau khi consortium ra đời, Richard Hipp bắt đầu phát triển SQLite toàn thời gian.
  • Khi tuyển thêm một số nhân viên, ông đã vận hành được một tổ chức phát triển nhỏ nhưng bền vững.

Kế hoạch hỗ trợ dài hạn đến năm 2050

  • Năm 2010, Airbus muốn dùng SQLite trong hệ thống avionics của dự án máy bay A350.
  • Airbus đã hỏi liệu SQLite có thể được duy trì và hỗ trợ trong thời gian dài hay không.
  • Xét đến việc tuổi thọ thân máy bay vào khoảng 40 năm, Richard Hipp đã cam kết hỗ trợ dài hạn.
  • Cam kết này không hẳn là nghĩa vụ pháp lý mà gần với mục tiêu dài hạn mà dự án SQLite theo đuổi.
  • Hiện tại, Richard Hipp đặt mốc kết thúc hỗ trợ cá nhân cho SQLite là năm 2050.
  • Mốc này được xác định theo cách “cộng thêm 50 năm cho code đứng sau dữ liệu”, tức duy trì mã lâu hơn tuổi thọ dự kiến của dữ liệu.

1.3. Giấy phép, triết lý mã nguồn mở và việc tự phát triển công cụ

Sự ra đời của giấy phép “lời cầu nguyện”

  • SQLite phiên bản 1 phụ thuộc vào thư viện GDBM.
  • Vì GDBM dùng giấy phép GPL nên SQLite cũng không thể tránh khỏi ảnh hưởng của GPL.
  • Sau đó, để hỗ trợ range query, ông đã phát triển một backend lưu trữ riêng dựa trên B-tree.
  • Khi loại bỏ phụ thuộc vào thư viện bên ngoài, ông có thể tự do lựa chọn giấy phép.

Lựa chọn Public Domain

  • Khi đó, các giấy phép được biết đến rộng rãi chủ yếu là MIT và Berkeley.
  • Thay vì dùng một giấy phép chứa các điều khoản pháp lý phức tạp, Richard Hipp đã phát hành SQLite dưới dạng Public Domain.
  • Về sau ông mới biết rằng khái niệm Public Domain không được công nhận giống nhau ở mọi quốc gia.
  • Dù vậy, chính sách công bố của SQLite trên thực tế vẫn được tiếp nhận theo cách gần giống giấy phép mã nguồn mở.

Câu chữ “lời cầu nguyện”

Trong phần header của mã nguồn SQLite, thay vì các câu chữ pháp lý thông thường, có một đoạn gần như là lời chúc hay lời cầu nguyện.

May you do good and not evil.
May you find forgiveness for yourself and forgive others.
May you share freely, never taking more than you give.

Khi SQLite trở thành một trong những thư viện phần mềm được sử dụng rộng rãi nhất thế giới, đoạn văn này cũng trở thành biểu tượng cho triết lý giấy phép rất riêng của SQLite.

Cách phát triển hạn chế tối đa đóng góp từ bên ngoài

  • SQLite không tích cực nhận pull request như các dự án mã nguồn mở thông thường.
  • Dự án duy trì cách làm trong đó đóng góp bên ngoài được hạn chế tối đa, còn đội ngũ cốt lõi trực tiếp viết và quản lý mã.
  • Richard Hipp ví pull request như một “free puppy”.
  • Cũng như việc nhận một chú chó con miễn phí sẽ kéo theo trách nhiệm chăm sóc lâu dài, việc nhận mã từ bên ngoài cũng dẫn đến các trách nhiệm dài hạn như sau.
    • Bảo trì mã
    • Kiểm thử
    • Tài liệu hóa
    • Sửa lỗi
    • Quản lý tương thích với các nền tảng khác
    • Trách nhiệm kỹ thuật trong thời gian dài
  • Việc hạn chế đóng góp từ bên ngoài là một trong những yếu tố giúp SQLite giữ được chất lượng và định hướng nhất quán trong hơn 26 năm.

Các ví dụ về tự phát triển công cụ

Fossil
  • Fossil là hệ thống quản lý phiên bản do chính SQLite tạo ra để quản lý dự án của mình.
  • Nó được phát triển vào thời điểm gần với Git.
  • Không chỉ quản lý mã nguồn, Fossil còn tích hợp các tính năng sau.
    • Quản lý phiên bản
    • Theo dõi issue
    • Wiki
    • Forum
    • Giao diện web
  • Bản thân Fossil cũng được xây dựng trên SQLite.
  • Vì vậy, Fossil còn đóng vai trò như một nền tảng beta test thực tế cho SQLite.
  • Trong quá trình phát triển và vận hành Fossil, đội ngũ có thể phát hiện và cải thiện các vấn đề của SQLite từ góc nhìn của nhà phát triển ứng dụng.
  • Richard Hipp đánh giá Git phù hợp với các dự án phân tán quy mô lớn như Linux kernel, còn Fossil phù hợp hơn với các dự án nhỏ như SQLite.
Lemon
  • Lemon là công cụ được phát triển để sinh SQL parser cho SQLite.
  • Thay vì dùng Yacc hay Bison có sẵn, ông đã tự tạo công cụ này.
  • Vì là công cụ tự phát triển, ông có thể tự do cải tiến cách sinh parser sao cho phù hợp với nhu cầu của SQLite.

Triết lý về công cụ tự làm và tự do

  • Với Richard Hipp, việc tự phát triển công cụ không đơn thuần là sở thích kỹ thuật.
  • Ông xem việc tự tạo ra công cụ mình cần là một hành động tự chăm sóc bản thân.
  • Khi giảm phụ thuộc bên ngoài, ông sẽ ít bị ảnh hưởng hơn bởi quyết định của các dự án hay công ty khác.
  • Ông cho rằng chính tính độc lập đó mở rộng tự do của nhà phát triển.
  • Tuy vậy, trước thực tế SQLite đang là phụ thuộc cốt lõi trong vô số hệ thống trên thế giới, ông cũng cảm thấy áp lực và lo ngại.

1.4. Kiểm thử triệt để và phát triển phần mềm trong thời đại AI

Kiểm thử là yếu tố cốt lõi tạo nên thành công của SQLite

  • Một trong những yếu tố then chốt giúp SQLite duy trì độ ổn định trong thời gian dài là kiểm thử cực kỳ nghiêm ngặt.
  • Đội ngũ phát triển SQLite không chỉ dừng ở việc xác nhận tính năng có hoạt động hay không, mà còn kiểm chứng nhiều tình huống ngoại lệ và nhiều nền tảng khác nhau.
  • Họ coi trọng kiểm thử đến mức lượng test code còn lớn hơn rất nhiều so với product code thực tế.

Áp dụng tiêu chuẩn DO-178B

  • Đội ngũ SQLite đã áp dụng phương pháp của tiêu chuẩn phát triển phần mềm hàng không DO-178B vào kiểm thử.
  • Qua đó, họ nâng độ phủ kiểm thử một cách có hệ thống.
  • Ở giai đoạn đầu phát triển Android, sau khi đạt mức độ phủ kiểm thử tương đương DO-178B, số lượng bug report gần như biến mất.
  • Từ trải nghiệm đó, họ xác nhận rằng kiểm thử triệt để có tác động trực tiếp đến việc cải thiện độ ổn định thực tế của phần mềm.

Phát hiện bug mới bằng fuzzing

  • Sau đó, công nghệ profile-guided fuzzing xuất hiện.
  • Fuzzing là phương pháp đưa dữ liệu ngẫu nhiên hoặc đã biến đổi vào chương trình để tìm các lỗi ngoài dự kiến.
  • Những loại bug mới mà ngay cả mức kiểm thử kiểu DO-178C cũng khó phát hiện đã được tìm ra nhờ fuzzing.
  • Điều này cho thấy chỉ độ phủ kiểm thử cao thôi vẫn chưa đủ để tìm hết mọi lỗi.

AI phát hiện bug

  • Gần đây cũng đã xuất hiện các trường hợp dùng AI để tìm bug hoặc viết bug report.
  • Dự án SQLite cũng từng nhận được các bug report bị nghi là do AI tạo ra.
  • AI có tiềm năng trở thành một công cụ xác minh phần mềm mới, bổ sung cho kiểm thử truyền thống và fuzzing.

Đánh giá của Richard Hipp về AI

  • Richard Hipp nói rằng suy nghĩ của ông về AI có thể thay đổi mỗi ngày.
  • Hiện tại, ông đang dùng AI như một công cụ rất hữu ích.
  • Ông kể lại trải nghiệm khi hỏi ChatGPT về mã SQLite và nhận được câu trả lời theo kiểu như sau.

“Tất nhiên là ông cũng biết rồi…”

  • Ông nói cảm giác hơi rợn người khi AI nói về đoạn mã do chính mình viết như thể nó còn hiểu rõ hơn cả ông.
  • AI hữu ích để tìm kiếm thông tin và gợi ý ý tưởng.
  • Nhưng nó không phải lúc nào cũng chính xác và có thể trình bày thông tin sai bằng giọng điệu rất thuyết phục.
  • Mã do AI tạo ra cũng từng gặp vấn đề tương thích, chẳng hạn chạy được trên một hệ điều hành nhưng không chạy được trên hệ điều hành khác.
  • Vì vậy, kết quả do AI tạo ra vẫn cần con người trực tiếp rà soát và chỉnh sửa.

Lời khuyên dành cho các nhà phát triển trẻ

  • Richard Hipp hoan nghênh những nỗ lực fork SQLite để tạo ra một cơ sở dữ liệu tốt hơn.
  • Nhưng ông nhấn mạnh rằng để đạt đến trình độ như SQLite thì cần những yếu tố sau.
    • Hơn 25 năm phát triển liên tục
    • Sự cống hiến bền bỉ cho một chủ đề duy nhất
    • Kiểm thử và cải tiến trong thời gian dài
    • Quan sát liên tục nhu cầu của người dùng
    • Kinh nghiệm tích lũy qua nhiều lần thất bại
  • Phần mềm xuất sắc không thể được tạo ra trong thời gian ngắn.
  • Ông cho rằng AI có thể làm thay đổi rất lớn cách phát triển phần mềm, nhưng rất khó dự đoán tương lai sẽ trông như thế nào.

1.5. Tính bền vững của SQLite và khía cạnh con người

Vì sao SQLite có thể tồn tại suốt 26 năm

  • Richard Hipp giải thích thành công của SQLite là nhờ ý trời và may mắn hơn là năng lực cá nhân của mình.
  • Ông nói mình không nghĩ bản thân là một lập trình viên đặc biệt xuất sắc.
  • Tuy vậy, ông phân tích rằng những khuynh hướng sau đã giúp ích cho sự phát triển của SQLite.
    • Sự cứng cỏi trong việc giữ cách làm của riêng mình
    • Thái độ đặt câu hỏi với những điều vốn được xem là hiển nhiên
    • Thói quen tự làm công cụ cần thiết
    • Xu hướng tập trung rất lâu vào một vấn đề
    • Tinh thần tận hưởng chính quá trình phát triển
  • Ông nói rằng bản thân quá trình liên tục suy nghĩ làm sao để xây dựng SQLite tốt hơn mới là điều quan trọng.

Lợi thế của một đội ngũ nhỏ

  • Richard Hipp nói mình không giỏi giao thiệp với quá nhiều người hay xử lý các mối quan hệ mang tính chính trị trong tổ chức.
  • Chính tính cách đó khiến ông giữ đội ngũ phát triển SQLite ở quy mô nhỏ.
  • Kết quả là cấu trúc đội ngũ nhỏ lại giúp ích cho việc giữ định hướng nhất quán và ra quyết định nhanh của SQLite.
  • Ông thừa nhận mình không có khả năng điều phối quan hệ với vô số nhà phát triển như Linus Torvalds của Linux.

Điều hành công ty cùng vợ là Ginger

  • Richard Hipp điều hành công ty cùng vợ mình là Ginger.
  • Cả hai duy trì tinh thần đồng đội linh hoạt, thậm chí đổi vai trò cho nhau tùy hoàn cảnh.
  • Ginger là một nhạc công và cũng rất giỏi giúp các nhạc công khác xử lý những vấn đề máy tính họ gặp phải.
  • Richard Hipp kể rằng Ginger còn nổi tiếng hơn ông trong cộng đồng địa phương.

Khía cạnh con người trong phát triển phần mềm

  • Richard Hipp không xem phần mềm chỉ là tập hợp của code hay công nghệ.
  • Ông nhấn mạnh rằng các yếu tố con người như cảm xúc của nhà phát triển, quan hệ cộng tác, sự ám ảnh, thất bại và cảm giác thành tựu đều rất quan trọng trong phát triển phần mềm.
  • Phần mềm là một sản phẩm phức tạp và trừu tượng, nhưng phía sau nó luôn là câu chuyện của những con người đã tạo ra nó.

Sách gợi ý: The Soul of a New Machine

  • Richard Hipp giới thiệu 《The Soul of a New Machine》 như một cuốn sách giúp hiểu được khía cạnh con người của phát triển phần mềm và máy tính.
  • Cuốn sách này không chỉ nói về công nghệ máy tính đơn thuần.
  • Nó đề cập đến những yếu tố sau trong quá trình tạo ra một máy tính mới.
    • Đam mê của các nhà phát triển
    • Xung đột nội bộ trong tổ chức
    • Thử thách kỹ thuật
    • Thất bại và nản lòng
    • Hợp tác và cạnh tranh
    • Cảm xúc trong quá trình sáng tạo
  • Ông nhấn mạnh rằng khả năng hiểu sâu công nghệ phức tạp nhưng vẫn truyền tải được nó như một câu chuyện giàu tính con người là điều rất quan trọng.

Kết luận

Lý do SQLite có thể được duy trì thành công trong hơn 26 năm không chỉ đơn giản là nhờ năng lực kỹ thuật vượt trội.

Các yếu tố thành công cốt lõi có thể tóm tắt như sau.

  1. Tự phát triển công nghệ cần thiết để giải quyết vấn đề thực tế.
  2. Giảm phụ thuộc bên ngoài và giữ quyền kiểm soát dự án.
  3. Coi trọng trách nhiệm bảo trì dài hạn hơn là các đóng góp từ bên ngoài.
  4. Tự tạo ra các công cụ mình cần như Fossil và Lemon.
  5. Áp dụng mức kiểm thử nghiêm ngặt cỡ phần mềm hàng không.
  6. Tận dụng AI và các kỹ thuật phát triển mới nhưng không mù quáng tin vào kết quả của chúng.
  7. Vận hành dự án dựa trên một đội ngũ nhỏ và các mối quan hệ mang tính con người.
  8. Kiên trì đắm mình trong một chủ đề suốt thời gian dài.

Điểm cốt lõi mà trường hợp của SQLite cho thấy là tự do không phải trạng thái không có bất kỳ ràng buộc nào, mà là trạng thái bạn có thể tự mình chịu trách nhiệm và kiểm soát những công cụ và đoạn mã mình sử dụng.

Cách phát triển của SQLite — giảm phụ thuộc bên ngoài, tự làm những công cụ cần thiết và kiểm chứng cực kỳ nghiêm ngặt — là một ví dụ quan trọng cho thấy phát triển phần mềm bền vững trông như thế nào ngay cả trong thời đại AI thay đổi rất nhanh.

4 bình luận

 
regentag 1 giờ trước

Do-178 của RTCA thực sự là một bộ hướng dẫn đủ ngắn để có thể đọc và áp dụng được. Nó cũng được áp dụng rộng rãi trong ngành hàng không.

https://studylib.net/doc/27132454/rtca-do-178b

 
hmmhmmhm 2 giờ trước

"Hơn 25 năm phát triển liên tục" đúng là rất ngầu...

 

Thật tuyệt.. cũng như trong phim vậy

 

Tư duy này thật tuyệt vời.