2 điểm bởi GN⁺ 1 ngày trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Đây là tiện ích cho phép sử dụng WebUSB API trên Firefox, vốn trước đây chỉ được hỗ trợ trên Chrome, bằng cách giao tiếp với chương trình bên ngoài trình duyệt thông qua cơ chế Native Messaging
  • Cần cài đặt đồng thời hai thành phần là tiện ích mở rộng trình duyệt (.xpi) và stub native thì mới hoạt động
  • Được thiết kế với mục tiêu tương thích với cách triển khai WebUSB của Chrome, nhưng không dùng được trong Web Workers, API chỉ được hiển thị trên trang chính
  • Android không được hỗ trợ vì bản thân Native Messaging không có trên nền tảng này
  • Cung cấp sẵn binary đã build cho 6 nền tảng gồm macOS(x86_64/ARM64), Linux(x86_64/aarch64), Windows(AMD64/ARM64)
  • Script cài đặt(install.sh / install.bat) tự động xử lý việc sao chép tệp và cấu hình native manifest
  • Stub native được viết hoàn toàn bằng Rust, mặc định hỗ trợ cross-compile
  • Yêu cầu hệ thống: macOS 10.15+, Windows 10+, Linux kernel 4.8+ (cần udev)
  • Giấy phép: 0BSD

1 bình luận

 
Ý kiến Hacker News
  • Trước đây tôi khá ghét WebUSB/Bluetooth vì lý do mang tính ý thức hệ, nhưng rồi sau khi thấy các trường hợp như ứng dụng điều khiển bảng leo núi hay netMD để truyền dữ liệu sang MiniDisc qua USB, tôi đã đổi ý. Tôi thấy việc cài một ứng dụng native cho những mục đích như vậy là quá mức cần thiết, nên thật vui khi giờ đây Firefox cũng có thêm một lựa chọn

    • Tôi cũng từng như vậy. Ban đầu khá hoài nghi, nhưng sau khi dùng WebUSB trong ứng dụng web cấu hình bàn phím cơ, thậm chí flash firmware ngay trong trình duyệt, tôi thấy nó khá tiện và ổn. Những việc như ZSA flash, trước đây phải tải file layout xuống rồi nạp bằng chương trình riêng, giờ chỉ cần trình duyệt dựa trên Chromium là xong nên đơn giản hơn nhiều
    • Ngược lại, chính vì thế mà tôi không muốn có WebUSB. Nếu nhà sản xuất phần cứng phụ thuộc hoàn toàn vào ứng dụng web cho việc cập nhật và cấu hình, thì đến một lúc nào đó khi dịch vụ biến mất hoặc không thể chạy cục bộ nữa, có khi thiết bị cũ vẫn hoạt động tốt mà lại không thể cấu hình nổi. Nghĩ đến những thiết bị như máy ảnh, nhạc cụ hay audio interface dùng hơn 10 năm thì đây là một kịch bản đặc biệt đáng tiếc
    • Theo tôi, việc đủ loại công cụ trước giờ chỉ chạy trên Windows nay có thể chạy trên bất kỳ OS nào nhờ webusb là một cải tiến cực lớn
    • Bây giờ có thể bạn thấy cài ứng dụng native là quá mức cần thiết, nhưng tôi nghĩ 20 năm nữa, nếu website dùng để quản lý thiết bị đó biến mất, chúng ta có thể lại gặp đúng kiểu bất tiện như cũ
    • Tôi cũng thấy ấn tượng ở chỗ khi cài GrapheneOS lên điện thoại, WebUSB gần như là con đường chủ đạo
  • Tôi thấy WebUSB thực sự rất tuyệt. Nó cho phép phân phối ứng dụng đa nền tảng có thể truy cập phần cứng mà không phải xử lý từng khác biệt theo từng platform, và driver cũng có thể được sandbox ở mức hợp lý. Nếu muốn siết bảo mật hơn nữa, có lẽ cũng ổn nếu chỉ mặc định cho phép các thiết bị có WebUSB descriptor, còn lại thì hiện thêm cảnh báo

    • Với những máy in nhiệt tôi mới mua gần đây, việc có hỗ trợ WebUSB dưới tên Chromebook support đã ảnh hưởng rất lớn đến quyết định mua hàng của tôi. Với những thiết bị có hỗ trợ driver in mặc định khá mập mờ, việc xử lý qua một extension của Chrome với quyền hạn bị giới hạn khiến tôi yên tâm hơn nhiều so với cài một driver khả nghi có quyền truy cập toàn hệ thống. Cũng rất thích ở chỗ có thể thử luôn các ứng dụng RTL-SDR mà không cần build từ source, và mỗi lần phải rời Firefox sang Chrome chỉ vì WebUSB hay Web Serial thì tôi đều thấy khá bực
    • Tôi thấy giới hạn đó quá chặt. Cùng lắm chỉ cần hiện cảnh báo là đủ, vì các trường hợp dùng như retrocomputing thường dùng nhiều thiết bị không có tag, nếu bị chặn thì rất bất tiện
    • Chỉ trong 3 tháng gần đây thôi, tôi đã flash FlipperZero, Android và cả các bộ đàm cầm tay Trung Quốc mà không cần cài ứng dụng khả nghi nằm ngoài sandbox. Điều này thật sự gần như một cuộc cách mạng
  • Gần đây tôi vừa cài GrapheneOS cho chiếc Pixel của một người bạn, và việc có thể hoàn tất toàn bộ quy trình chỉ bằng WebUSB trong trình duyệt thật sự khá đáng ngạc nhiên. Điểm trừ duy nhất là phải mở Chromium

    • Thậm chí còn có thể cài GrapheneOS từ một Pixel sang Pixel khác nên chẳng cần đến PC. Trải nghiệm đó chính là ví dụ khiến tôi tin vào tính thực dụng của WebUSB, và nếu là thiết bị GOS thì bạn còn có thể dùng Vanadium thay cho Chrome
    • Tôi thấy cả Web USB lẫn Web Bluetooth đều thật sự tuyệt vời. Tôi đã dùng Web MiniDisc để làm việc với MiniDisc, và cũng flash firmware tùy chỉnh cho cảm biến nhiệt độ/độ ẩm Xiaomi BLE từ web để tích hợp với Home Assistant. Điều tôi đặc biệt thích là giờ có thể làm những việc này mà không cần chạy script đáng ngờ hay binary cục bộ
    • Tôi đã dùng trên Firefox hai lần rồi, đều không gặp vấn đề gì. Tôi có dùng nextdns trên router nên không chắc nó có giúp gì không, nhưng dù sao nó cũng hoạt động
  • Các dự án như GrapheneOS, ESPHome và Meshtastic đã tận dụng WebUSB rất tốt, Google cũng từng dùng nó để biến tay cầm Stadia thành thiết bị nhập Bluetooth thông thường. Các công cụ cấu hình của nhà sản xuất bàn phím cũng vậy. Vì người dùng phải tự chọn thiết bị một cách tường minh nên tôi thấy mô hình bảo mật cũng hợp lý, và việc Mozilla từ chối hỗ trợ native cho nó khiến tôi thất vọng, khá giống những gì họ đã thể hiện trong 10 năm qua

    • Thành thật mà nói, tôi nghĩ những tính năng như thế này phù hợp nhất dưới dạng extension. Việc website trực tiếp truy cập vào stack USB hay Bluetooth là quá ngách để mặc định bật sẵn; opt-in sẽ hợp lý hơn. Giống như các ứng dụng riêng kiểu Bluetooth browser trên iOS, một con đường tách biệt chỉ dùng khi cần sẽ tốt hơn về mặt kỹ thuật vì giảm bề mặt tấn công và tránh làm trình duyệt ngày càng phình to. Tôi ước những Web API JS khổng lồ kiểu này được plugin hóa nhiều hơn
  • Dạo này thậm chí ngay cả ứng dụng cục bộ cũng ngày càng được phát hành dưới dạng html & js chỉ dành cho Chrome. Bỏ qua chuyện có thích việc trình duyệt truy cập USB hay không, tôi còn ghét hơn cái xu hướng lại bị ép dùng Chrome như thời bị ép dùng IE ngày xưa

    • Tôi vẫn nghĩ mình muốn xây lại web thành một trình đọc tài liệu hypertext không có kitchen sink. Giờ đây nhờ LLM, tôi cảm thấy những prototype kiểu này thực tế hơn trước
  • Với các nền tảng phần cứng giáo dục như BBC Microbit, WebUSB là một thứ thay đổi cuộc chơi. Khi giới thiệu phần cứng cho học sinh, mọi thứ cứ thế chạy được, còn nhờ web IDE như MakeCode và URL tham chiếu mã nguồn, việc chia sẻ và debug cũng dễ dàng hơn

  • Cách triển khai này trông giống một proof of concept rất tốt. Cách chạy một file thực thi riêng bên cạnh trình duyệt không phải là hình thái WebUSB cuối cùng mà tôi mong muốn, nhưng việc có người thực sự bắt tay giải quyết bài toán này bản thân nó đã là tín hiệu đáng mừng

    • Còn tôi thì ngược lại, bản thân việc xử lý USB trực tiếp trong trình duyệt đã không khiến tôi thấy thoải mái lắm
  • Phản ứng đầu tiên của tôi là đây là một ý tưởng khủng khiếp. Tôi không thích việc website truy cập phần cứng, và chỉ riêng quyền truy cập webcam thôi cũng đã đủ khó chịu rồi

    • Tôi nhìn hơi khác. Trước đây, để nâng firmware cho thiết bị, bạn phải tải về một ứng dụng C++ ngẫu nhiên và trao cho nó toàn bộ quyền của người dùng trên hệ thống của mình. Trong khi đó với WebUSB, bạn chỉ vào trang web, chạy luồng xử lý trong sandbox, và khi trình duyệt yêu cầu thì tôi có thể cấp quyền cho đúng một thiết bị USB đó. Nó không thể đụng vào các thiết bị USB khác, hệ thống file, system API, đăng ký khởi động cùng hệ thống hay cài auto-update, nên về tư thế bảo mật tôi lại thấy nó tốt hơn
    • Dù thích hay không thì ranh giới giữa ứng dụng và trang web đã mờ đi rất nhiều, và tôi nghĩ trong tương lai nó còn mờ hơn nữa. Ngay cả ứng dụng cục bộ cũng ngày càng thường xuyên dùng trình duyệt như một bộ thông dịch thay vì Python và Qt
    • Vấn đề này đơn giản thôi. Đừng cấp quyền truy cập là được. Nhưng tôi cũng không muốn người khác ngăn cản người dùng làm gì với chính phần cứng của họ. Một thế giới chỉ còn các hệ sinh thái đóng kiểu doanh nghiệp còn tệ hơn nhiều
    • Nếu không thích thì đừng chọn thiết bị và cũng đừng bấm nút allow
    • Website vốn dĩ đã dùng CPU và RAM rồi. Theo tôi cũng nên nhìn chuyện đó như một phần của cách nó hoạt động
  • Tôi vẫn chưa hoan nghênh việc đưa nó vào trình duyệt khi đặc tả vẫn còn ở trạng thái draft và các lo ngại về bảo mật chưa thực sự được giải quyết thỏa đáng

    • Ngược lại, tôi cho rằng vấn đề bảo mật khi không có WebUSB là mỗi lần muốn dùng thiết bị USB, bạn lại phải cài một driver native khó mà tin tưởng
    • Nếu vậy thì tôi tò mò chính xác hàm ý bảo mật mà WebUSB tạo thêm là gì, so với các trường hợp vốn dĩ đã phải tải chương trình native về như flash điện thoại
    • Tôi đồng ý với cách hiểu rằng việc đặc tả vẫn còn ở trạng thái draft là vì Apple đang cản trở tiến trình. Các API như WebUSB, WebBluetooth có thể cạnh tranh với App Store nên có lẽ họ không thích về mặt doanh thu. Mô hình bảo mật thực tế thì vẫn là người dùng phải chủ động cho phép truy cập thiết bị theo từng site, nên tôi không thấy nó khác quá nhiều so với các browser API dựa trên quyền khác
    • Vì thế nên tôi luôn chuẩn bị sẵn một instance Chrome riêng chỉ dùng khi cần, để phòng trường hợp Firefox không tích hợp những tính năng cơ bản kiểu này
  • Nếu WebUSB và WebBLE được hỗ trợ ở mọi nơi, tôi có thể phân phối ứng dụng IoT của mình chỉ bằng web, năng suất chắc sẽ tăng đáng kể. Điểm hấp dẫn nhất là cũng giảm được nhiều phiền toái liên quan đến app store

    • Tôi vừa mới biết đến chuyện này lần đầu, và giờ đang tự hỏi liệu CCTV DVR trong đầu tôi có thể cung cấp web app cho điện thoại, thậm chí stream video luôn hay không. Khi tìm kiếm thì nên tra theo Web Bluetooth API thay vì webble sẽ ra kết quả tốt hơn