Trải nghiệm sử dụng trình duyệt web Servo được viết bằng Rust
(spacebar.news)- Khi thị phần toàn cầu của các trình duyệt dựa trên Chromium (Chromium) tăng lên, mối lo ngại về tính đa dạng của chuẩn web và tương lai của web mở ngày càng lớn
- Servo được phát triển bằng Rust sở hữu hai thế mạnh là khả năng đa luồng và an toàn bộ nhớ, nên đang được chú ý như một lựa chọn thay thế mới trong lĩnh vực động cơ render web
- Vì còn ở giai đoạn đầu nên lỗi render vẫn tồn tại trên phần lớn các website, nhưng một số trang demo hoặc các site đơn giản như Wikipedia vẫn hoạt động bình thường
- Dự án Servo bắt đầu từ trước do Mozilla dẫn dắt, nhưng hiện do Linux Foundation Europe quản lý, với cấu trúc ra quyết định dựa trên kỹ thuật và cộng đồng
- Trong xu hướng đơn điệu hóa động cơ trình duyệt, việc duy trì phát triển liên tục các động cơ thay thế như Gecko, Servo cho thấy vai trò quan trọng trong việc gìn giữ tính đa dạng của hệ sinh thái web
Sự tập trung hóa động cơ web và rủi ro
- Vào những năm 1990~đầu những năm 2000, Internet Explorer với Trident, Opera với Presto, Netscape với Gecko và Konqueror với KHTML từng cùng tồn tại
- Theo thời gian, KHTML được hợp nhất thành WebKit, còn Presto và Trident (cũng như Tasman) được thay thế bởi Blink (động cơ của Chromium)
- Khi các trình duyệt lớn hiện nay (Chrome, Edge, Opera, v.v.) gần như đều dựa trên nền tảng Chromium/Blink, một hiện tượng rằng hiện thực hóa biến thành chuẩn đang xuất hiện
- Các vấn đề như lỗ hổng bảo mật, giới hạn mở rộng trở nên nổi bật khi toàn bộ hệ sinh thái web bị ảnh hưởng đồng thời khi phụ thuộc vào một động cơ duy nhất
Sự xuất hiện của Servo
- Servo là một động cơ render trình duyệt được phát triển mới hoàn toàn bằng Rust
- Dựa trên ưu điểm Rust về xử lý đa luồng và an toàn bộ nhớ, đây là nỗ lực nhằm giảm bớt các điểm yếu cấu trúc vốn có ở các động cơ truyền thống C/C++ (ví dụ lỗi bộ nhớ)
- Mục tiêu chính của Servo là một động cơ render web nhúng, có thể được dùng không chỉ cho trình duyệt độc lập mà cả như một lựa chọn thay thế cho Electron hoặc Android WebView
- Dưới trụ sở của Linux Foundation Europe, các quyết định kỹ thuật được vận hành theo mô hình hội đồng kỹ thuật thay vì dựa trên các tập đoàn lớn
- Sau hơn 10 năm, đây là một động cơ web browser mới hoàn toàn đầu tiên xuất hiện, với việc cải thiện mức độ hoàn thiện dựa trên kinh nghiệm từ các động cơ chủ lưu
Trải nghiệm sử dụng và tình hình hiện tại của Servo
- Có thể trải nghiệm Servo qua bản Nightly build công khai trên trang web chính thức (dành cho Windows, macOS, Android, Linux)
- Các tính năng cơ bản như bookmark, extension, đồng bộ dữ liệu đang ở trạng thái không được hỗ trợ
- Phần lớn website có lỗi render, Google Search hoặc một số site bị vỡ bố cục hoặc crash
- Các trang có cấu trúc đơn giản như Wikipedia, CNN Lite hoạt động bình thường
- Ở trang demo của Servo có thể trình diễn hiệu năng đồ họa, và benchmark Particle Physics cho thấy kết quả 55~60 FPS trên MacBook Pro mới nhất (mô phỏng x86)
- Trong bài kiểm tra Acid3, điểm số là 83/100, thấp hơn mức khoảng 95 của các trình duyệt chủ lưu
- Trong lộ trình đã được đưa vào các chuẩn web quan trọng như Shadow DOM, CSS Grid, tập trung vào cải thiện tính tương thích web
Lịch sử và các mốc chuyển đổi chính của Servo
- Servo khởi động tại Mozilla năm 2012, và năm 2013 Samsung đã tham gia phát triển
- Mục tiêu ban đầu từng xem xét thay thế Gecko sau khi ổn định, nhưng thực tế đã chuyển sang chiến lược thay thế dần từng phần Gecko bằng mã Servo
- Bản cập nhật Firefox 57 (Quantum) đã thay thế động cơ CSS (Quantum CSS, Stylo) bằng mã Servo, cho thấy cải thiện rõ rệt về hiệu năng và hiệu quả sử dụng bộ nhớ
- Sau đợt tái cấu trúc lớn của Mozilla năm 2020 (kể cả cả nhà phát triển Servo), Servo sau đó được chuyển giao cho Linux Foundation để đảm bảo lại nguồn tài chính, và hiện đang tiếp tục phát triển theo hướng cộng đồng với sự bảo trợ của các công ty mã nguồn mở như Igalia
Khả năng tương lai của hệ sinh thái trình duyệt
- Sau khi Bộ Tư pháp Mỹ thắng kiện chống độc quyền đối với địa vị thống lĩnh của Google (Chrome, Android), đã có thảo luận về việc bán Chrome và cấm các thỏa thuận tìm kiếm với trình duyệt bên thứ ba
- Mozilla phụ thuộc khá lớn vào doanh thu từ việc sắp xếp tìm kiếm mặc định trên Firefox (rất cần thiết để duy trì phát triển Gecko), nên đã bày tỏ phản đối các biện pháp này
- Nếu Mozilla mất nguồn thu từ Google, khả năng Firefox sẽ chuyển sang WebKit hoặc Chromium/Blink để tiết kiệm chi phí phát triển là có thật
- Trong trường hợp đó có thể xuất hiện các kịch bản như fork code Gecko và vận hành cộng đồng, hoặc Gecko suy giảm dần
- Sự tồn tại của các động cơ thay thế như Servo và Gecko lại nổi lên như yếu tố then chốt để duy trì tính đa dạng và cân bằng của nền tảng web
Kết luận và hàm ý
- Dù có xu hướng thống nhất hóa động cơ trình duyệt chủ lưu, sự xuất hiện của các giải pháp thay thế mang tính đột phá như Servo có vai trò quan trọng trong việc giữ gìn tính đa dạng và sức khỏe của hệ sinh thái web
- Không dễ để hoàn thiện thành trình duyệt dùng hàng ngày trong ngắn hạn, nhưng hoạt động thử nghiệm và phát triển công nghệ tiếp tục diễn ra
- Hướng phát triển tiếp theo của Servo và tác động lan tỏa trong ngành đang tạo nhiều kỳ vọng
4 bình luận
Bắt tải về dùng một thứ còn chạy không ra hồn sao? Thái độ ngạo mạn đó rốt cuộc từ đâu mà ra vậy.
Tôi nghe nói Rust là ngôn ngữ được tạo ra để phát triển Servo... hy vọng Servo sẽ thành công.
Dự án Hurd cứ liên tục hiện lên trong đầu tôi… chắc chỉ là tôi tự tưởng tượng thôi nhỉ?
Ý kiến trên Hacker News
Trong lộ trình hiện tại, Shadow DOM và CSS Grid đang được ưu tiên; tôi đang làm phần hỗ trợ CSS Grid, và sắp tới sẽ bổ sung hỗ trợ cho "named grid lines and areas". Tôi kỳ vọng điều này sẽ giúp nhiều bố cục trang web hoạt động đúng hơn. Có thể tôi thiên vị vì đây là dự án của mình, nhưng tôi nghĩ cách Servo triển khai CSS Grid khá hay. Phần cốt lõi được tách thành một thư viện bên ngoài (Taffy, liên kết GitHub), và thư viện này đang được dùng rất rộng trong hệ sinh thái Rust UI. Ví dụ, nó được dùng trong web engine Blitz(liên kết), trình soạn thảo văn bản Zed(liên kết) và game engine Bevy(liên kết) cho nhiều vai trò như Flexbox, Block layout, v.v. Dựa trên kinh nghiệm phát triển các thư viện mô-đun như Stylo, html5ever, Servo đang đi theo hướng tách web engine thành các mô-đun độc lập với API công khai; tôi hy vọng điều này sẽ hạ thấp rào cản gia nhập cho các lập trình viên web engine trong tương lai và giúp ích lớn cho những người mới làm web engine
Đây là lần đầu tôi nghe về Blitz; nó có vẻ là một dự án rất thú vị và đầy tham vọng, như một web engine thực sự “ẩn mình”. Servo thì đã nổi tiếng rộng rãi từ khi Rust mới ra mắt, nhưng Blitz cũng ấn tượng không kém
Tôi tò mò không biết trải nghiệm tự tay triển khai chức năng của browser engine có ảnh hưởng đến cách viết HTML hay CSS không. Cũng muốn hỏi liệu bạn có còn phải tìm "css grid cheatsheet" ba lần một tuần không
Tôi lo rằng cách tiếp cận tách nhỏ tính năng để mô-đun hóa có thể lại dẫn tới thừa tính năng hoặc phân mảnh. Muốn đối đầu với Google thì chiến lược tập trung mới quan trọng, nên điểm này khiến tôi băn khoăn
Tôi đang dùng taffy để làm layout cho chiếc lịch e-ink nhỏ viết bằng Rust của mình, nên nghe tin này thấy rất thú vị
Tôi thật sự thích cách chia web engine thành các mô-đun API công khai có thể dùng độc lập. Hồi trước khi xem WebRTC, tôi từng nghĩ tại sao việc làm một bản nhái Skype hơi cùi lại chỉ có thể rơi vào một trong hai lựa chọn: 50 dòng JavaScript hoặc ác mộng build Chromium C++ kéo dài cả tuần. Giờ thì đã có cả WebRTC Rust crate, nên thật may là không chỉ web app mới được hưởng lợi từ những khoản đầu tư kiểu này
Tôi có cảm giác Mozilla sắp được đưa vào đại sảnh danh dự kiểu Xerox, tức “công ty tạo ra công nghệ tương lai rồi vô tình để đối thủ cướp mất”. Họ từng vượt Google trong phát triển trình duyệt nhờ Rust và Servo, nhưng cuối cùng lại không tiếp tục đẩy mạnh, điều đó thật sự khó hiểu
Mozilla không giống Xerox. Nếu ai đó là Xerox mới thì đúng hơn phải là Google. Google đang đổ nguồn vốn khổng lồ vào các bộ phận R&D không có kế hoạch kinh doanh rõ ràng. Ví dụ tiêu biểu là mô hình Transformer — về cơ bản chính Google làm ra LLM trước, nhưng cuối cùng vẫn bị OpenAI vượt lên. Thành công của Mozilla thì từ trước tới nay luôn tập trung vào web browser như Netscape, Firefox. Ngay cả Rust về bản chất cũng là ngôn ngữ được tạo ra cho trình duyệt; việc nó hữu ích ở nơi khác chỉ là hiệu ứng phụ tốt đẹp thôi
Từ năm 2006, Google đã là nguồn thu chủ yếu của Mozilla. Để Mozilla tồn tại thì chỉ cần làm Google hài lòng. Điều này có khả năng gây xung đột, nhưng từ góc nhìn của Mozilla thì là một thương vụ khá ổn
Tôi nghĩ Mozilla giờ coi như hết rồi. Họ phụ thuộc quá nhiều vào Google, mà giờ còn có nguy cơ mất cả chỗ dựa đó. Servo và Ladybird sẽ là tương lai, và việc Ladybird tiến bộ rất nhanh chỉ với một nhóm nhỏ thực sự rất ấn tượng
Nếu Mozilla từ bỏ Gecko, thì đó sẽ là lúc phải hard fork và thoát khỏi Mozilla. Nói rõ là việc từ bỏ Gecko ở đây không có nghĩa chuyển sang Servo mà là chuyển sang Chromium
Tôi có cảm giác rất khó khiến mọi người trả tiền cho trình duyệt. Họ sẵn sàng chi 10 euro cho bia, nhưng quanh tôi có rất nhiều người còn tìm cách né giấy phép WhatsApp trọn đời giá 0,99 euro
Tôi vẫn không hiểu vì sao Mozilla lại từ bỏ tương lai kỹ thuật của Firefox. Nhưng khi nhìn Mozilla qua lăng kính dòng tiền thì nhiều thứ lại trở nên dễ hiểu
Việc đóng cửa dịch vụ Pocket cũng là một ví dụ buồn. Tôi từng tưởng tượng như một trò đùa Cá tháng Tư rằng Mozilla sẽ thông báo khai tử Firefox để tập trung vào mảng kinh doanh cốt lõi. Một câu đùa cay đắng rằng có lẽ “ý niệm Plato” về mảng kinh doanh cốt lõi của họ chính là khai tử thật đẹp những sản phẩm được yêu thích
Nhìn vào nhiều vụ ra đi và cách giao tiếp, tôi nghĩ Mozilla hồi đó là một công ty cực kỳ chính trị. Servo vốn giao tiếp rất sôi nổi, Rust cũng có không khí tích cực, nên có khi chính điều đó lại làm cấp trên khó chịu. Mozilla đến giờ vẫn chủ yếu do những người cũ điều hành, và tôi cho rằng lỗi lớn nằm ở các sai lầm của ban điều hành cấp cao
Tôi vẫn rất tin Servo có thể trở thành đối trọng thực chất với thế độc quyền của Chrome/Chromium. Tôi không hiểu vì sao Mozilla bỏ cuộc, cũng không hiểu vì sao Linux Foundation gần như không hỗ trợ mấy
Nếu nhìn chiến lược của Mozilla theo hướng độc lập dần khỏi tiền của Google trong dài hạn thì cũng có lý. Doanh thu ngoài Google thực tế đã tăng từ 80 triệu USD năm 2022 lên 150 triệu USD năm 2023. Tổng tài sản cũng tăng thêm 100 triệu USD mỗi năm, đạt 1 tỷ USD vào năm 2023. Tỷ trọng tiền từ Google giảm từ 90% năm 2020 xuống 75% năm 2023. Chưa thể gọi là hoàn toàn độc lập, nhưng rõ ràng có hướng đi. Trái với điều nhiều người thường nói, nếu chỉ nhìn dòng tiền thì có thể ra kết luận khác. Mọi người chỉ trích rằng lẽ ra nên tiếp tục Servo, nhưng thực ra tôi không nghĩ Servo đã đóng vai trò lớn trong Firefox sau Quantum
Có đúng là phần lớn doanh thu của Mozilla đến từ Firefox không?
Còn có Ladybird(trang chủ chính thức) đang cố thách thức thế độc quyền của Blink. Chưa chắc tương lai sẽ ra sao, nhưng tôi đang khá kỳ vọng
Tôi không rõ mục tiêu của Ladybird là gì. Rõ ràng nó không chỉ là dự án sở thích đơn thuần, vì có cả cựu kỹ sư và đang huy động quyên góp. Nhưng tôi khó hình dung nó có thể cạnh tranh với Blink, Webkit, Gecko về tính năng, bảo mật hay hiệu năng hay không. Đây vốn không phải công việc dành cho đội ngũ nhỏ, nên nếu không được chấp nhận rộng rãi thì việc chỉ làm engine thôi có lẽ cũng không tạo được nhiều tác động. Điều này cũng đúng với Servo, nhưng Servo có mục tiêu kỹ thuật thuyết phục hơn. Còn ở Ladybird thì tôi chưa thấy thông tin rõ ràng như vậy
Nếu chỉ xét về mặt kỹ thuật, tôi không thấy Ladybird hấp dẫn lắm. Về cơ bản nó được viết bằng C++, nên không khác biệt gì rõ rệt với Gecko hay Blink. Servo thì có những khác biệt thiết kế kỹ thuật rất rõ như bảo mật, tính song song, nên hấp dẫn hơn
Tôi hy vọng Ladybird thành công. Giờ đã có thể tài trợ trực tiếp, nên tôi thấy điều đó có ý nghĩa. Không giống Mozilla, tôi tin khoản tiền quyên góp sẽ được dùng hoàn toàn cho việc phát triển trình duyệt
Tôi tò mò không biết Ladybird có đang thử chuyển sang Swift không. Nếu phát triển browser engine bằng C++ thì tôi không thích lắm, nhưng đó là lựa chọn thực tế và tập trung vào kết quả. Nếu là Rust thì tôi sẽ công nhận đó là hướng nhìn về tương lai. Còn làm engine bằng Swift hay ngôn ngữ khác thì lại giống một quyết định mang tính chính trị nội bộ công ty. Tôi thấy khó hiểu khi cố chọn một ngôn ngữ mà hệ sinh thái hỗ trợ vẫn còn thiếu (tweet tham khảo)
Bài test Dogemania chạy mượt 60 FPS với tới 400 ảnh trên M4 Pro MacBook Pro. Nhưng trên Chrome thì vẫn giữ 60 FPS tới 1400 ảnh; quá mức đó thì tôi lười thử tiếp nên đóng luôn
Tôi cũng thử thí nghiệm tương tự và chênh lệch giữa Firefox với Chromium lớn đến mức đáng thất vọng. Trên Chromium, qua 1000 ảnh rồi mà vẫn giữ được 100 FPS, còn Firefox thì vừa vượt 500 ảnh là tụt ngay xuống dưới 60 FPS. Có thể không phải bài test hoàn toàn công bằng (Chromium không có addon và tôi cũng ít dùng trình duyệt đó), nhưng nó vẫn cho tôi thấy khá nhiều về hiệu năng tương đối
Nếu trong dogemania hình ảnh đứng yên sau khi hoạt ảnh kết thúc, thì chẳng phải đây là một trường hợp cực kỳ dễ tối ưu sao? Tôi còn có cảm giác ngay cả những máy tính cũ như Amiga cũng có thể xử lý mức này gần như vô hạn
Gọi Servo là engine “mới” thì hơi gượng ép
Tôi từng biết rằng Rust được tạo ra cho web browser Servo
Về ý kiến “nếu chỉ còn lại một triển khai duy nhất của tiêu chuẩn thì nó sẽ trở thành chính tiêu chuẩn”, tôi không hiểu tại sao đó lại là vấn đề. Nếu triển khai là mã nguồn mở và đặc tả được quyết định bởi một ủy ban do nhiều bên quản lý thì tôi thấy vẫn ổn. Tình trạng như hiện nay, khi phải đổ rất nhiều tài nguyên để làm nhiều engine khác nhau, mới là lãng phí. Tôi nghĩ browser engine cũng nên như Linux kernel: chỉ có một cái, còn bản phân phối thì đa dạng theo nhiều cách khác nhau mới hiệu quả
Dù ý định có tốt đến đâu thì việc triển khai vẫn luôn có bug và những sai sót nhỏ. Nếu không có một triển khai độc lập thứ hai, cuối cùng bug cũng sẽ trở thành tiêu chuẩn vì “đằng nào mọi thứ cũng chạy được”. Khi trang web phụ thuộc vào những bug này, thì rốt cuộc mọi thứ sẽ vận hành theo khiếm khuyết chi tiết của một triển khai cụ thể chứ không theo đặc tả. Đó cũng là lý do UI cũ trên MS Windows bị chồng nhiều lớp và việc giữ tương thích trở thành cơn ác mộng. Có nhiều triển khai độc lập thì tiêu chuẩn mới thực sự có thể được duy trì, phát triển và tối ưu hóa dễ hơn
Về mặt lý thuyết thì ổn, nhưng trong thực tế, một nhà phát triển duy nhất không phải lúc nào cũng có lợi ích trùng với người dùng, nên độc quyền là điều không mong muốn. Đặc biệt như việc loại bỏ manifest v2 gần đây trên Blink, người dùng cũng rất không thích
Càng có nhiều browser engine thì càng giảm nguy cơ mọi lỗ hổng bảo mật cùng tập trung vào một chỗ. Dù là ngôn ngữ an toàn bộ nhớ thì sai sót logic vẫn có thể gây thiệt hại, nên tính đa dạng rất quan trọng
Bạn có nhắc tới chiến lược “một engine, nhiều bản phân phối”, nhưng với những người quen môi trường BSD hay ZFS thì ngược lại, khi bước ra khỏi cách làm cũ sẽ cảm nhận rất rõ sự ổn định và độ hoàn thiện
Ý kiến của Google hoặc những người cùng phe họ vốn đã ảnh hưởng rất mạnh tới quá trình tiêu chuẩn hóa rồi. Nếu mọi thứ đều bị Chromium chi phối thì tình hình sẽ còn tệ hơn nữa. Có lẽ chỉ khi thật sự xảy ra khủng hoảng thì mọi người mới thừa nhận giới hạn của những nơi như W3C hay WHATWG
“Phần lớn website có một ít lỗi render, một số thì không hoạt động hoàn toàn; kết quả tìm kiếm Google có nhiều phần tử chồng chéo, trang chủ MacRumors bị crash sau khi cuộn, nhưng Wikipedia, CNN Lite, các website cá nhân, văn bản NPR thì hoạt động hoàn hảo” — khi thấy những nhận xét như vậy, tôi hầu như không bao giờ thấy ai nói rằng phía Google hay MacRumors nên sửa trang cho phù hợp với Servo. Thay vào đó, kết luận thường chỉ là Servo phải hoạt động giống Chrome/Chromium, và điều đó khiến tôi rất tiếc. Như vậy thì (a) cuối cùng công ty quảng cáo sẽ là bên quyết định tiêu chuẩn, và (b) những người làm web page sẽ có động lực sai lệch. Làm theo hướng đơn giản như Wikipedia hay CNN Lite thực ra lại dễ hơn nhiều. Tôi nghĩ browser “chuẩn” nên hướng tới thứ gần tiêu chuẩn thật sự chứ không phải thứ phổ biến nhất. Chạy được trên cả browser ít người dùng lẫn browser phổ biến mới là đúng chuẩn. Rốt cuộc câu trả lời nằm ở việc sửa web page chứ không phải sửa web browser. Tôi vẫn đang thử nghiệm với thư viện và công cụ libwww gốc của w3c; chỉ cần chỉnh đôi chút là tới giờ nó vẫn hoạt động tốt cho việc tối ưu web page dạng văn bản suốt hơn 30 năm. Internet là tài sản công, nhưng browser và page ngày nay lại lệch quá nhiều về tối ưu quảng cáo và thu thập dữ liệu cá nhân, điều đó thật đáng tiếc. Chỉ khi page/browser thật sự ưu tiên người dùng www thì mới có ý nghĩa. Dưới đây là một script đơn giản để build static binary bằng libwww
Thật đáng buồn khi thấy Mozilla dần chuyển từ một công ty trình duyệt có tính cạnh tranh thành một tổ chức mang màu sắc hoạt động xã hội; vì thế sản phẩm cốt lõi dường như ngày càng yếu đi