Chán rồi, nên tôi đang viết một trình duyệt
(adayinthelifeof.nl)- Trải nghiệm né tránh tin tức cá nhân dần dẫn tới tin công nghệ, và sau khi liên tục cảm thấy bất lực trước những thay đổi tiêu cực lặp đi lặp lại, tác giả quyết định tự làm một trình duyệt
- Trên Hacker News, tác giả liên tục bắt gặp những xu hướng như cập nhật ngoài mong muốn, tăng phí thuê bao, thu thập dữ liệu cá nhân, bàn luận về việc cấm mã hóa, và kiểm soát hệ sinh thái trình duyệt
- Lần này, thay vì chỉ né tránh, tác giả thử phản ứng nhỏ bằng cách viết mã và công khai nó với tư cách là một lập trình viên
- Tác giả thừa nhận khả năng dự án hoàn thành hoặc trở thành trình duyệt phổ biến là thấp, và nếu không nhận được hỗ trợ thì có thể sớm phải dừng lại
- Tác giả hy vọng một dự án trình duyệt công khai, phi thương mại có thể truyền cảm hứng cho người khác và dẫn tới nhiều dự án thay thế hơn
Quá trình việc né tránh tin tức dẫn đến phát triển trình duyệt
- Khoảng 10 năm trước, khi thường xuyên lái xe đến chỗ khách hàng, tác giả hay nghe Business News Radio (BNR) hoặc Radio 1 của Hà Lan, nhưng rồi một ngày tắt radio đi và không còn muốn nghe tin tức nữa
- Tác giả cảm thấy trên tin tức chỉ lặp đi lặp lại những điều tồi tệ như chiến tranh, tham nhũng, và cho rằng với tư cách cá nhân thì không có cách nào giải quyết những vấn đề đó
- Từ đó, tác giả tránh nghe, xem và lướt tin tức trên Internet; khi bản tin 8 giờ bắt đầu thì đổi kênh hoặc rời khỏi căn phòng đang phát tin tức
- Tác giả cho rằng rồi những tin quan trọng cũng sẽ đến qua người khác, nên ngoài tin chung chỉ tiếp cận hạn chế một số subreddit trên Reddit và tin công nghệ
Cảm giác bất lực lặp lại cả trong tin công nghệ
- Tác giả tiếp cận tin công nghệ khoảng 98% thông qua Hacker News của Y Combinator, nhưng theo thời gian, cảm giác từng có với tin tức phổ thông 10 năm trước lại lớn dần lên
- Những vấn đề lặp đi lặp lại mà tác giả gặp là cập nhật ngoài mong muốn, thất hứa, tăng phí thuê bao, bị doanh nghiệp thâu tóm, cố thu thập thêm dữ liệu cá nhân, v.v.
- Tác giả cũng xem xu hướng chính phủ muốn cấm mã hóa với lý do tội phạm xâm hại trẻ em là một phần của cùng vấn đề đó
- Trình duyệt trở thành mục tiêu đặc biệt quan trọng vì đó là nơi gần như mọi người trên thế giới dành thời gian
- Nếu chính bản thân trình duyệt hiển thị quảng cáo, thì các trình chặn quảng cáo vốn chặn quảng cáo trên website có thể sẽ khó đối phó hơn
- Đã từng có trường hợp dùng tiện ích mở rộng chỉ dành cho một trình duyệt cụ thể khiến website khó dùng trên trình duyệt khác, và tác giả cho rằng nếu xuất hiện cách né tránh vấn đề độc quyền thì chuyện này có thể lặp lại
Lý do tự làm và kỳ vọng thấp
- Lần này, thay vì chỉ đơn thuần né tránh, tác giả cho rằng với tư cách lập trình viên mình có thể tự phát triển trình duyệt và chia sẻ mã nguồn
- Có hai lý do để quyết định làm trình duyệt
- Một nỗ lực phản đẩy lại, dù chỉ theo cách rất nhỏ
- Lý do cá nhân là từ lâu đã muốn tự tay làm một trình duyệt
- Tác giả không đặt nhiều kỳ vọng vào dự án
- Không kỳ vọng nó sẽ hoàn thành
- Cho rằng nếu không có người hỗ trợ thì nó có thể sớm chết yểu
- Không kỳ vọng nó sẽ trở thành trình duyệt thống trị có thể đánh bại các trình duyệt lớn hiện có
- Điều tác giả mong muốn là nó được mở ra vì mục đích phi thương mại, để người khác có thể lấy cảm hứng và tạo ra dự án của riêng mình
- Có thể xem tiến độ dự án tại bài viết cập nhật trên codemusings.nl
- Kho lưu trữ của dự án nằm tại jaytaph/gosub-browser
1 bình luận
Ý kiến trên Hacker News
Tôi là OP. Cảm ơn mọi bình luận tích cực/tiêu cực/trung lập; xin bổ sung vài điều: đúng là đã có nhiều dự án trình duyệt có thể đóng góp và làm vậy hiệu quả hơn, nhưng như thế thì rốt cuộc chỉ còn lại vài trình duyệt. Tôi muốn có nhiều trình duyệt để mọi người có lựa chọn
Đây rõ ràng là một dự án cá nhân. Ngay cả nếu không phải vì chán ngán ngành công nghệ thì tôi vẫn có thể đã bắt đầu làm việc này, nhưng tôi tức giận trước cảm giác bất lực rằng mình không thể thay đổi gì, và đây là cách tôi thử làm điều gì đó. Tôi không kỳ vọng sẽ hoàn thiện được một trình duyệt thực sự. Tôi mong mọi người nhìn vào mã của tôi rồi cười, hoặc có được ý tưởng tốt hơn. Ví dụ, nếu thuật toán tokenizer và parser HTML5 được giải thích từng bước như trên trang whatwg, thì ai cũng dễ tự viết parser HTML5 của mình hơn. Nếu Google hay Microsoft dựa vào sức mạnh thị trường để tạo ra một HTML5 tùy biến dạng đóng, chẳng hạn như ghtml, thì ai có thể ngăn được? Lý do tôi muốn bắt đầu từ con số không là vì tôi muốn hiểu rõ hơn những khó khăn kỹ thuật ở tầng thấp
Tôi cũng đồng cảm với nhận xét về sự khốn khổ của “tin tức”. Trong chiến tranh tâm lý, chuyện này được gọi là làm suy giảm tinh thần (sapping). Trước đây, kẻ thù dùng tuyên truyền để bẻ gãy ý chí kháng cự và khiến người ta bất lực; ví dụ kinh điển là Lord Haw-Haw. https://en.wikipedia.org/wiki/Lord_Haw-Haw
Ngày nay, các kênh tin tức chính thống và những gã khổng lồ công nghệ dường như đang cố giữ mọi người trong trạng thái tuyệt vọng và bất an thường trực. Diễn ngôn về công nghệ cũng giống như một hố sâu của sự hoài nghi, né tránh, phủ định, cam chịu và bất lực học được; gần đây tôi đã làm nhiều phỏng vấn và phân tích cảm xúc, kết quả thật khủng khiếp. Tôi có cảm giác bản thân từ “tech” đang dần trở thành đồng nghĩa với “kháng cự là vô ích”. Làm điều gì đó không phải vì kỳ vọng thành công, mà để nêu gương và giữ cho chính mình còn tỉnh táo, là phản ứng tích cực và nhân văn nhất
Nói theo kiểu Linus Torvalds, khi làm với tinh thần “không định tạo ra thứ to lớn và chuyên nghiệp như GNU, mà là thứ cho chính tôi”, bạn có thể đạt được nhiều thứ với ít nỗ lực hơn rất nhiều. Làm như vậy cho phép thỏa hiệp thực dụng, và dù là để học hay để dùng thật, bạn có thể đi tới một thứ hữu ích cho bản thân với nỗ lực nhỏ hơn nhiều so với khi làm một “sản phẩm”. Nhiều dự án cá nhân của tôi cũng bắt đầu từ việc phát hiện những dự án cá nhân nhỏ như vậy, tái sử dụng một phần rồi đi theo hướng hoàn toàn khác. Nhặt một dự án nhỏ “đủ gần” dễ hơn nhiều so với cắt gọt hoặc điều chỉnh một con quái vật khổng lồ đầy đủ tính năng. Độ phức tạp của trình duyệt phần lớn đến từ việc phải hỗ trợ mọi trang web và mọi kịch bản sử dụng, nhưng nếu làm cho chính mình, tôi có thể tập trung vào việc khiến các trang tôi quan tâm chạy đủ tốt, nhờ đó vấn đề giảm đi rất nhiều. Tôi mong nhiều người hơn thử sức với những dự án “bất khả thi”. Dù toàn bộ chưa hữu ích ngay cho người khác, một phần vẫn có thể hữu ích, và đôi khi từ một dự án cá nhân nhỏ lại xuất hiện thứ lớn hơn, như Linux
Nếu chỉ cần một nửa thời gian người ta dùng để nói rằng dự án của ai đó là vô dụng và phí thời gian được dùng vào việc mang tính xây dựng, thế giới hẳn đã có nhiều dự án tuyệt vời và thú vị hơn rất nhiều. Thất bại trong một việc táo bạo và tham vọng vẫn tốt hơn là hoàn toàn không thử
Bạn không cần triển khai mọi tính năng của trình duyệt web hiện đại. Không cần những thứ như Battery API, Game Controller API, USB; hãy tập trung vào những phần quan trọng là HTML, CSS, JS. Tệ nhất thì bạn cũng học được điều mới. Chúc dự án may mắn
Câu “tôi không kỳ vọng gì cả, cũng không kỳ vọng sẽ hoàn thành, nếu không có ai giúp thì đây sẽ là một dự án sớm chết, tôi không kỳ vọng nó trở thành trình duyệt thống trị để đánh bại các tay chơi khổng lồ trên thị trường” giống với thông báo đầu tiên về Linux mà Linus từng đăng lên comp.os.minix
Đó là bài bắt đầu bằng “Xin chào mọi người đang dùng minix. Tôi đang làm một hệ điều hành tự do cho máy clone AT 386(486). Chỉ là sở thích thôi nên sẽ không lớn và chuyên nghiệp như gnu…”, rồi nói rằng ông đã port bash và gcc, có vẻ vài tháng nữa sẽ có thứ gì đó dùng được, không hứa sẽ triển khai nhưng hãy cho biết các tính năng mong muốn. Cuối bài còn nói rằng không có mã minix nào cả, có hệ thống tệp đa luồng nhưng không có tính di động, và có lẽ sẽ không hỗ trợ gì ngoài đĩa cứng AT
Không ai biết một dự án sẽ đi xa tới đâu. Và nếu bạn làm vì lý do của riêng mình, thì theo một nghĩa nào đó, điều đó cũng không quan trọng
Tôi không quen với bầu không khí tiêu cực như vậy trên HN về trình duyệt và web mở. Tôi xem đây là một nỗ lực rất đáng giá, bất kể có thành công hay không
Ngay cả khi kết quả chỉ là một trình duyệt nửa vời không bị chi phối bởi động cơ của các gã khổng lồ công nghệ, nó vẫn có thể hữu ích nếu một ngày nào đó chúng ta phải ngừng phụ thuộc vào Firefox. Tôi rất thích Firefox nên hy vọng ngày đó không đến, nhưng tôi nhận ra rằng khi truy cập web, trình duyệt của mình là một dạng nút thắt cổ chai. Có những website khác để xem cùng nội dung, cũng có những thương hiệu máy tính khác để dùng, nhưng ở giữa thì luôn là Firefox. Cũng có các trình duyệt khác, nhưng phần lớn trông như dựa trên Googlium hay bất cứ cái tên nào của nó ngày nay. Vì vậy tôi chúc dự án may mắn và thành công, và dự định đăng ký RSS feed để thỉnh thoảng theo dõi dự án
Thực ra cũng có bằng chứng cho thấy điều đó là khả thi. Ladybird được xây dựng từ đầu, ban đầu thậm chí còn tự viết cả thư viện chuẩn C++, và sau 3–4 năm làm bán thời gian, giờ đã chạy được Discord dù còn chậm. Hiện dự án cũng có lập trình viên toàn thời gian. Với GoSub, nhìn vào cargo.lock thì có vẻ họ không định triển khai mọi thứ từ đầu; những thứ như bộ giải mã ảnh nhiều khả năng sẽ dùng sẵn, nên có tiềm năng phát triển nhanh hơn
Ngày nay, “viết trình duyệt từ đầu” thực chất gần như có nghĩa là triển khai một hệ điều hành di động trong một chiếc hộp, tức nền tảng web, và làm cho nó tương thích với những thứ Google quyết định thêm vào trình duyệt của họ
Trình duyệt có quá nhiều tính năng và API, và việc bắt kịp các thay đổi tính năng liên tục cùng sức thống trị của Google khó đến mức ngay cả Microsoft cũng không làm nổi. Có một dự án cá nhân liên quan là Tersenet. https://github.com/runvnc/tersenet
Nó gần giống một khái niệm hơn là có nhiều phần triển khai, nhưng các yêu cầu được chủ ý chọn để mọi người có thể triển khai. Nó ít phức tạp hơn rất nhiều so với một trình duyệt web đầy đủ. Cũng có một cuộc thảo luận liên quan với GPT-4. https://chat.openai.com/share/16d02b78-f876-4c87-949a-a60b4f...
Dự án Gemini thực sự tồn tại và mang tính thực dụng cũng có liên quan. https://geminiprotocol.net/ Nó đã truyền cảm hứng cho ý tưởng Tersenet
WebSQL, IndexedDB, service worker, WebGL, WebGPU, WebBluetooth, WebRTC — cứ coi như tất cả không tồn tại là được. 99% website thực tế, tức các trang web không phải “ứng dụng” web, sẽ không mất chức năng nào
Cá nhân tôi muốn có thêm các engine thay thế ngoài sự đơn canh của Blink và họ hàng WebKit của nó, cũng như Gecko/Quantum. Sẽ tốt nếu có thứ gì đó thay thế vị trí mà KHTML từng nắm trước khi bị WebKit hấp thụ, hoặc một lựa chọn nguồn mở khác để thử nghiệm
Tôi mong những người đồng tình mạnh với ý tưởng này sẽ thống nhất được một tập con để sử dụng, và tôi vẫn có thể hài lòng với một trình duyệt không làm mọi thứ mà trình duyệt của Google làm. Tôi dùng uMatrix để tắt khá nhiều tính năng của Google, không bao giờ đưa miền google.com vào danh sách cho phép, và vẫn dùng như để chứng minh rằng thế giới không sụp đổ. Số site không hoạt động chỉ là tương đối ít
Đại đa số website không muốn tuân theo những thứ mới được tạo ra dành riêng cho Google như công nghệ quảng cáo, AMP, DRM
Có lẽ Mozilla và các bên khác nên tạo ra một “VM” JavaScript độc lập mà mọi người đều có thể dùng
Với tư cách là người từng hoàn toàn không biết trình duyệt “thật” hoạt động ra sao nhưng vẫn quyết định tự viết một trình duyệt, thậm chí còn làm cả engine layout tùy chỉnh, tôi chỉ muốn nói là cứ làm đi
Việc nhìn thấy một website được render bằng mã của chính mình là điều rất đáng công, dù mã hay đầu ra có lộn xộn đến đâu. Dự án của tôi đã được khoảng hai năm rưỡi, và giờ render HN cùng các blog đơn giản cũng tạm ổn. Nếu hỏi nó có khách quan tốt hơn w3m — thứ ban đầu tôi định thay thế — hay không thì không hẳn, nên tôi vẫn quay lại dùng w3m cho một số tác vụ. Dù vậy, nó đã hữu ích cho những việc tôi không ngờ tới, tôi học được rất nhiều về lập trình, và dù sao thì việc nó chạy được cũng thật tuyệt. https://sr.ht/~bptato/chawan
Tạo một trình duyệt nghĩa là tạo rendering engine và layout engine. Không phải là không làm được, nhưng đó là một nhiệm vụ khá lớn
Tuy vậy cũng có nhiều việc có khả năng đem lại kết quả hơn. Có thể port Servo sang Nyxt Browser, hoặc fork WebKit/Servo/Gecko để loại bỏ các chuẩn web xâm lấn, có hại cho người dùng mà các công ty quảng cáo đã nhồi vào trong 10 năm qua. Dù sao nếu đó là những việc phải làm khi viết từ đầu, thì thay vì bắt đầu từ con số không, nên bắt đầu từ một cộng đồng hiện có vốn đã sẵn sàng cùng làm việc
Gecko gần như là định nghĩa của một khối monolith, nên gần như không thể loại bỏ bề mặt tấn công; ngay cả Tor cũng dùng cách thay thế stub tệ hại, cứ mỗi lần API nội bộ hay bridge thay đổi là lại vỡ. Tuy nhiên, một mình theo kịp upstream là điều bất khả thi, nên cần người đóng góp và maintainer. Từ góc nhìn an ninh mạng, tôi đã cố gắng ghi tài liệu bề mặt tấn công nhiều nhất có thể, đồng thời ghi lại các việc còn lại và những thứ cuối cùng cần loại bỏ. https://github.com/tholian-network/retrokit/blob/main/SECURI...
Có thể khá chủ quan vì tôi muốn dùng RetroKit làm webview cho Browser Stealth của mình. Browser Stealth hoạt động như một proxy lọc, scraper và cache phi tập trung. https://github.com/tholian-network/stealth hiện đang được viết lại bằng golang
Nó cần được kết hợp với các text layout engine như https://github.com/pop-os/cosmic-text, và hiện vẫn chưa hỗ trợ mọi tính năng. Những tính năng tiêu biểu còn thiếu hiện nay là
float,display: inline-block,box-sizing: content-box,position: static. Nhưng nó đã hỗ trợ Block, Flexbox, CSS Grid và đang bổ sung thêmĐúng là việc lớn, nhưng cũng chưa phải là điều bất khả thi nhất đối với một nhóm nhỏ tận tâm
Có thể bắt đầu bằng việc render các website HTML đơn giản một cách hợp lý; cũng không cần vội, và không có quy tắc nghiêm ngặt nào bắt phải triển khai mọi ngóc ngách của chuẩn. Trình duyệt web và web mang tính con người một cách rực rỡ
Lấy các engine hiện có, nối chúng lại, module hóa đủ để lúc nào cũng có thể thay thế, thì vẫn là một trình duyệt đúng nghĩa. Cá nhân tôi thấy mọi người ở đây dường như quá tập trung vào các bánh răng bên trong, trong khi thực tế ngoài rendering/layout/scripting ra, chúng ta còn cần giao diện và các thành phần khác tốt hơn
Ủng hộ bạn. Hãy tiếp tục thử
Tôi đã triển khai một phần rất nhỏ của thuật toán ORC Solver bằng Python, và dùng wxWidgets để render. Tôi dùng API phạm vi văn bản của wxWidgets để tính chiều rộng văn bản. Whitepaper của ORC Solver ở đây. https://yuejiang-nj.github.io/Publications/2020CHI_ORCSolver...
Tôi đang suy nghĩ cách triển khai branch and bound, nên nếu có thông tin liên quan thì sẽ rất hữu ích. Có lẽ phải nghiên cứu codebase của TeX để xem thuật toán dàn chữ, và việc dùng thư viện JavaScript Masonry cho bin packing layout cũng rất thú vị
“Nếu muốn HTML của ta, ta sẽ cho! Hãy tìm đi! Ta đã để mọi thứ trên đời ở đó”
“Và thế là các hacker hướng tới HyperText Line để theo đuổi giấc mơ, còn thế giới bước vào Kỷ nguyên Đại Trình duyệt thực sự!”
Suốt nhiều năm, tôi tin rằng trình duyệt là ngọn núi không thể vượt qua, nhưng giờ dường như ngày càng nhiều người tin rằng chúng ta có thể làm được. Phân tích trong 2 giây thì tôi thấy xu hướng này xuất hiện vì những người tạo trình duyệt mới không cố bắt chước và cạnh tranh với những con quái vật khổng lồ hiện có, mà vì họ muốn thay đổi web. Tôi thích điều đó
Về phần chính trị trong bài viết, thế giới đang đổ vỡ, và chỉ đọc những tin tức đổ vỡ là một việc mệt mỏi. Tuy vậy, tôi cho rằng tách mình khỏi thực tế để trở nên “phi chính trị” là từ bỏ nhân loại, tức là từ bỏ chính con cái mình, cháu mình, và con cái của những người bạn thân nhất
Không nhất thiết phải thay đổi cả thế giới; chỉ cần những thay đổi nhỏ trong cộng đồng của mình cũng là đủ. Đặc biệt với tư cách lập trình viên, những gì chúng ta tạo ra có thể ảnh hưởng đến hàng nghìn người trên toàn thế giới và thay đổi hướng đi. Đôi khi tôi tự hỏi liệu tình hình có khác đi không nếu mọi người chỉ đầu tư 3–5% thời gian của mình vào việc hỗ trợ cộng đồng và một hình thức hoạt động nào đó
Dù sao thì chẳng có gì tôi đọc trên tin tức sẽ thay đổi cách tôi bỏ phiếu, mà đó có lẽ lại là lý do tốt nhất để xem tin tức
Nói cách khác, tôi đã từ bỏ thế giới. Nhưng con cái của người khác không phải trách nhiệm của tôi. Tôi cố làm “điều đúng đắn” ở mức như người khác, nhưng không hơn thế. Trước đây tôi từng trăn trở về những điều này, cố giảm dấu chân cá nhân, nghĩ đến tính bền vững và các thế hệ tương lai, nhưng tôi đã mất hy vọng. Cảm giác như đang chiến đấu ngược dòng. Giờ tôi chỉ cố để dấu chân của mình không lớn hơn mức trung bình và đối xử tốt với những người xung quanh
Nếu Rust là bắt buộc, có lẽ sẽ hữu ích hơn nếu học bằng cách đóng góp cho Servo, bắt đầu từ những PR nhỏ. https://github.com/servo/servo
Tuy vậy, tôi hiểu vì tôi cũng từng làm một dự án “từ đầu” do thấy khó đọc codebase hiện có hoặc nghĩ rằng mình có thể làm tốt hơn. Mỗi người có cách riêng
Tương tự, Servo được thiết kế để thay thế một phần của trình duyệt Firefox, nên nó phải khớp với cái lỗ “hình Gecko”. Ví dụ, vì lý do tương thích với phần còn lại của Firefox, nhiều chỗ dùng chuỗi UTF-16. Nếu là bây giờ, có lẽ có thể viết lại Servo bằng Rust hiện đại để khiến nó nhỏ hơn, gọn hơn, và có thể nhanh hơn