Sử dụng FreeBSD 15 trên laptop
(sacredheartsc.com)- FreeBSD 15 đã được cải thiện nhờ pkgbase, các cải tiến driver LinuxKPI và dự án hỗ trợ laptop, đến mức có thể dùng làm môi trường desktop chính chứ không chỉ là OS cho máy chủ
- Sau lần thử với FreeBSD 14, hỗ trợ KDE Plasma 6, Wayland và Intel WiFi đã được bổ sung, nên trên ThinkPad X1 Carbon hầu hết tính năng đều hoạt động tốt ngoại trừ Bluetooth
- Việc cài đặt được thực hiện với giả định dùng image memstick FreeBSD 15.1, khởi động UEFI, ZFS (GPT) và chọn kiểu cài base system là
Packages - Việc thiết lập môi trường desktop cần thực hiện theo từng bước gồm driver, tiết kiệm điện, quyền devfs, tương thích Linux, D-Bus, Ly, KDE, PipeWire và cả tăng tốc video phần cứng
- Trong một số môi trường laptop vẫn còn các vấn đề đã biết như lỗi WiFi sau khi khôi phục từ chế độ ngủ, treo đồ họa Intel, hoặc tiến trình còn sót lại sau khi đăng xuất KDE, và mỗi trường hợp đều cần cách обход riêng
Tổng quan
- FreeBSD 15 cho thấy cải thiện lớn trong môi trường desktop trên laptop nhờ pkgbase, các cải tiến driver LinuxKPI và việc ra mắt Laptop Support and Usability Project
- So với thời điểm từng thử desktop với FreeBSD 14, việc port KDE Plasma 6, Wayland hoạt động và Intel WiFi được hỗ trợ đầy đủ là những thay đổi đáng kể
- Trên ThinkPad X1 Carbon, thời lượng pin vào khoảng 6–7 giờ, và ngoài Bluetooth chưa thử thì các chức năng phần cứng đều hoạt động tốt
- Có thể dùng Laptop Compatibility Matrix mới để kiểm tra phần cứng mình đang có hỗ trợ được những gì
- Hướng dẫn này giả định sử dụng đồ họa Intel và chipset không dây Intel; các cấu hình phần cứng khác nằm ngoài phạm vi trải nghiệm trực tiếp
Cài đặt
- Tải image memstick FreeBSD 15.1 và ghi vào USB bằng
dd- Ví dụ, tải image bằng
curl -OJrồi chạysudo dd if=FreeBSD-15.1-RELEASE-amd64-memstick.img of=/dev/sdX bs=1M conv=sync
- Ví dụ, tải image bằng
- Trình cài đặt khá đơn giản; hệ thống được cấu hình khởi động UEFI và bố cục đĩa chọn
ZFS (GPT) - Ở bước hỏi kiểu cài đặt base system, chọn
Packagesđể dùng pkgbase mới - Nếu bật SSH trong quá trình cài đặt, bạn có thể sao chép và dán qua phiên SSH thay vì nhập trực tiếp trên console ảo
- Sau khi khởi động lại, đăng nhập vào tài khoản root bằng mật khẩu đã đặt trong lúc cài đặt
Dùng gói mới nhất
- Cây ports của FreeBSD có hai nhánh:
quarterlyvàlatest quarterlycố định cây ports theo snapshot bốn lần mỗi năm, và trong khoảng giữa các lần đó các gói bên thứ ba chỉ nhận các bản vá bảo mật quan trọnglatestlà mô hình rolling release, nhận các bản cập nhật gói lớn ngay khi chúng sẵn sàng- Cấu hình mặc định là kho
quarterly; để chuyển sanglatest, tạo file override trong/usr/local/etc/pkg/repos - Đặt URL kho thành
pkg+https://pkg.FreeBSD.org/${ABI}/latestvàkmods_latest_${VERSION_MINOR}, sau đó chạypkg updatevàpkg upgrade
Thiết bị phần cứng, driver, tinh chỉnh
-
Điều chỉnh bootloader
- Trong
/boot/loader.confcó thể thiết lập thời gian chờ của bootloader, vô hiệu hóa destructive dtrace, và tăng giới hạn bộ nhớ dùng chung cùng số tiến trình - Các hệ thống hỗ trợ Intel Speed Shift có thể dùng
machdep.hwpstate_pkg_ctrl="0"để cho từng lõi tự thiết lập trạng thái nguồn riêng - Có thể cấu hình tiết kiệm điện PCI,
soreceive()nhanh, tăng độ dài hàng đợi mạng, và tăng timeout giao dịch ZFS để phù hợp hơn với nhu cầu dùng desktop và laptop
- Trong
-
Mô-đun kernel
- Thêm
cpuctlvàcoretempvàokld_listđể bật xem thông tin CPU và nhiệt độ - Thuật toán điều khiển tắc nghẽn H-TCP hướng tới hiệu năng tốt hơn trên các mạng nhanh và khoảng cách xa như Internet, và có thể dùng qua mô-đun
cc_htcp - Trên ThinkPad, cần mô-đun
acpi_ibmđể các nút bấm hoạt động
- Thêm
-
Điều chỉnh sysctl
- Trong
/etc/sysctl.confcó thể áp dụng các thiết lập bảo mật như hạn chế thay đổi keymap, vô hiệu hóa core dump, các thiết lập liên quan đến ASLR, chặn ICMP redirect và vô hiệu hóa IP redirect - Một số hướng dẫn bảo mật khuyên dùng W^X, kiểm tra hardlink, và hạn chế xem tiến trình của người dùng khác, nhưng ở đây các thiết lập đó được comment lại vì cho rằng chúng gây ra nhiều vấn đề hơn
- Các thiết lập hiệu năng mạng tăng bộ đệm TCP và hàng đợi để phù hợp với các kết nối có RTT lớn hơn, dựa trên giả định rằng giá trị mặc định được tối ưu cho độ trễ LAN
- Các tối ưu cho desktop gồm ngăn bộ nhớ dùng chung bị swap, tăng ngưỡng preemption của scheduler, và cho phép người dùng thường mount
- Để tiết kiệm điện trên laptop, dùng
hw.snd.latency=7để giảm độ phản hồi âm thanh
- Trong
-
WiFi
- Hỗ trợ WiFi đã cải thiện đáng kể so với trước đây nhờ LinuxKPI và driver
iwlwifimới - Kiểm tra card không dây có được hỗ trợ hay không trong danh sách chipset hỗ trợ của
iwlwifi, và cài firmware cần thiết bằngfwget -v - Để dùng
iwlwifimới trên card cũ, có thể cần chặn nạp driveriwmcũ bằngdevmatch_blocklist="if_iwm" - 802.11n và 802.11ac mặc định bị vô hiệu hóa, nên cần các thiết lập
compat.linuxkpi.iwlwifi_11n_disable="0"vàcompat.linuxkpi.iwlwifi_disable_11ac="0" - Tạo thiết bị
wlan0trongrc.confvà đặtWPA DHCP powersaveđểwpa_supplicant(8)quản lý mạng WiFi - Có thể quản lý mạng bằng cách chỉnh trực tiếp
wpa_supplicant.conf(5)hoặc dùng giao diện đồ họa củanetworkmgr networkmgrcần quyền superuser, và có thể thêm quy tắc sudoers để nhómoperatorchạy mà không cần mật khẩu- Driver
iwlwifitrong FreeBSD 15.1-RELEASE có vấn đề đã biết liên quan đến suspend/resume
- Hỗ trợ WiFi đã cải thiện đáng kể so với trước đây nhờ LinuxKPI và driver
-
CPU và đồ họa
- Microcode CPU mới nhất được cài qua gói
cpu-microcode, sau đó cấu hình trongloader.confđể nạp khi khởi động - Tiết kiệm điện cho CPU dùng
performance_cx_lowest=Cmaxvàeconomy_cx_lowest=Cmaxđể bật các C-state thấp, giúp giảm hao pin và nhiệt - Trên các bộ xử lý Intel mới, không còn cần chạy
powerd(8)nữa - Driver đồ họa Intel được thiết lập bằng cách cài
drm-kmodrồi cấu hình nạpi915kmskhi khởi động
- Microcode CPU mới nhất được cài qua gói
-
Quyền thiết bị và khả năng tương thích
- Trên hệ thống desktop, thêm quy tắc devfs để người dùng thường có thể điều khiển GPU, video, đèn nền và thiết bị USB
- Trong
/etc/devfs.rules, chỉ định quyền và nhóm chodrm/*,video*,backlight/*,usb/*, rồi đặtdevfs_system_ruleset=localrules - Chạy binary Linux bằng cách bật Linuxulator với
linux_enable=YES, và nếu cần thì mount devfs, tmpfs, fdescfs, linprocfs, linsysfs dưới/compat/linux - Nạp mô-đun kernel
fusefsđể mount các hệ thống tệp như exFAT hoặc NTFS - Webcam có thể được hỗ trợ bằng cách cài
webcamd,v4l-utils,v4l_compatvà đặtwebcamd_enable=YES - Máy in cần CUPS và
cups-filters, đồng thời chỉnhcups-files.confđể nhómoperatorcó thể cấu hình máy in - Truy cập GUI cấu hình CUPS tại
localhost:631trong trình duyệt
-
Nguồn điện laptop và đèn nền ThinkPad
- Trên laptop, trong
/etc/rc.localchạyusbconfigvàpower_saveđể đưa các thiết bị USB không hoạt động vào trạng thái tiết kiệm điện - Để phím đèn nền ThinkPad hoạt động, cần nạp mô-đun
acpi_ibm, đặtdev.acpi_ibm.0.handlerevents="0x10 0x11", và thêm quy tắcdevd - Script
/usr/local/libexec/thinkpad-brightnesssẽ tăng hoặc giảm độ sáng theo bước 2, 5, 10 tùy theo độ sáng hiện tại - Cấp quyền thực thi cho script và khởi động lại
devdđể áp dụng - Sau khi hoàn tất cấu hình phần cứng và driver, hãy khởi động lại để kiểm tra xem các thay đổi có làm hỏng hệ thống hay không
- Trên laptop, trong
Tường lửa
- Cấu hình này hướng tới việc bật tường lửa trên mọi hệ thống; ví dụ mặc định sẽ chặn mọi kết nối đến ngoại trừ SSH
- Trong
/etc/pf.conf, thay giao diệnegressbằng tên giao diện mạng thực tế và chỉ cho phép cổng SSH nhận kết nối TCP inbound - Cho phép dải UDP
1024:65535để phục vụ gọi thoại và video - Đặt
pf_enable=YESvà khởi động tường lửa bằngservice pf start
Vô hiệu hóa script periodic
- FreeBSD mặc định đi kèm nhiều script periodic(8) quét ổ đĩa, truy cập Internet và gửi email
- Có thể xem danh sách đầy đủ trong
periodic.conf(5) - Với người dùng desktop thông thường, chỉ một số tác vụ là hữu ích, còn phần lớn có thể vô hiệu hóa an toàn
- Cấu hình ví dụ chuyển hàng loạt các tác vụ daily, weekly, monthly, và các đầu ra sao lưu/báo cáo trạng thái/hàng đợi mail/kiểm tra bảo mật sang
NO
Tài khoản người dùng
- Tạo tài khoản người dùng cục bộ và thêm vào các nhóm
operator,video,wheel operatorcần cho việc cấu hình thiết bị và máy in, cònvideocần để truy cập thiết bị GPU- Nhóm
wheelđược dùng để chạy lệnh quyền root quasudo - Sau khi cài
sudo, cấu hình%wheel ALL=(ALL:ALL) ALLtrong file sudoers
Locale, thời gian, SSH, chứng chỉ
-
Locale
- Biến môi trường của shell đăng nhập được thiết lập trong
login.conf(5), thêmcharset=UTF-8vàlang=en_US.UTF-8 - Để áp dụng thay đổi, xây dựng lại cơ sở dữ liệu đăng nhập bằng
cap_mkdb /etc/login.conf - Với shell không đăng nhập, thiết lập
LANGvàCHARSETtrong/etc/profile.d/locale.sh
- Biến môi trường của shell đăng nhập được thiết lập trong
-
NTP và múi giờ
- Để giữ đồng hồ hệ thống luôn được cập nhật, cần ntpd(8)
- Trong
ntp.confđặt máy chủ NTP pool của FreeBSD và cấu hình giới hạn truy cập - Nếu chưa thiết lập múi giờ khi cài đặt, tạo liên kết tượng trưng từ
/usr/share/zoneinfo/America/New_Yorksang/etc/localtime
-
openssh-portable
sshtrong base system của FreeBSD có nhiều bản vá được áp dụng, và tác giả ưu tiênopenssh-portablenguyên bản từ ports- Ở phiên bản mới, tệp cấu hình
sshdnằm dưới/usr/local/etc/ssh - Trong
/etc/rc.conf, tắtsshdcủa base và chạy dịch vụ mới bằngopenssh_enable=YES - Lệnh
sshsẽ tiếp tục dùng/usr/bin/sshcủa base system nếu không thay đổi$PATH - Để ưu tiên bản từ ports cho mọi người dùng, chỉnh thứ tự
pathtronglogin.confđể/usr/localđứng trước rồi xây dựng lại cơ sở dữ liệu
-
Terminal, chứng chỉ, D-Bus
- Cơ sở dữ liệu
termcap(5)của FreeBSD đơn giản hơn loại thường thấy trên Linux, và màu sáng có thể không được render trong các terminal họ XTerm - Cài
terminfo-dbcó thể khắc phục vấn đề này - FreeBSD mặc định chỉ tin cậy một phần các tổ chức chứng thực chuẩn, vì vậy cài
ca_root_nsslà bộ CA đầy đủ của Mozilla - KDE và nhiều tính năng desktop hiện nay cần D-Bus, có thể bật bằng
dbus_enable=YESvàservice dbus start
- Cơ sở dữ liệu
Trình quản lý hiển thị Ly
- Thông thường desktop session được khởi động bằng trình quản lý hiển thị đồ họa như SDDM, nhưng tại thời điểm bài viết được viết, trên FreeBSD nó không thể khởi động Wayland session một cách ổn định
- SDDM gần như hoạt động được, nhưng có lỗi khiến nhiều tổ hợp phím làm phiên bị thoát
- Cách hiện tại là khởi động Wayland session bằng Ly display manager dựa trên console
- Ly không chạy như daemon; trong
/etc/ttys, cấu hình để console ảo chạy/usr/local/bin/ly_wrapper - Thêm mục Ly vào
/etc/gettytabrồi khởi động lại hoặc làm mới init bằngkill -HUP 1thì lời nhắc đăng nhập của Ly sẽ xuất hiện - Trong
config.ini, có thể buộc dùng Wayland session bằngxinitrc=null,xsessions=null,shell=false,waylandsessions=/usr/local/share/wayland-sessions
Font, KDE, ứng dụng desktop
- Cài các font chuẩn như Cantarell, Droid, Inconsolata, Noto, Noto Emoji, Roboto, Ubuntu, webfonts để website hiển thị đúng
- Với KDE và các thành phần desktop, cài
kde,kdegraphics,kdemultimedia,kdeutils,phonon-mpv,pipewire,pulseaudio,wireplumberv.v. - Ví dụ ứng dụng desktop gồm Chromium, Firefox, LibreOffice, Thunderbird, Signal Desktop, Wine, Emacs Wayland, Git, mpv, tmux v.v.
- Một số tính năng desktop phụ thuộc vào PipeWire, và xem trước trên thanh tác vụ có vẻ sẽ không hoạt động nếu PipeWire không chạy
- Có thể tự động chạy PipeWire bằng tệp autostart
/usr/local/etc/xdg/autostart/pipewire.desktop - Để lưu mật khẩu khóa SSH trong
kwallet, hãy exportSSH_ASKPASS_REQUIRE=prefervàSSH_ASKPASS=/usr/local/bin/ksshaskpasstrong môi trường KDE
Tăng tốc video bằng phần cứng
- Sau khi cài đúng gói, có thể dùng tăng tốc video bằng phần cứng trên hầu hết GPU Intel
- Tăng tốc video bằng phần cứng mang lại khả năng phát video mượt hơn và thời lượng pin tốt hơn
- Các gói cần thiết là
libva-intel-media-driver,libva-utils,libvdpau-va-gl,vdpauinfo - Người dùng phải có quyền truy cập GPU thông qua thiết bị
drm, nên cần thuộc nhómvideo - Một số ứng dụng có thể cần cấu hình bổ sung để tận dụng hardware offload
-
Chromium Browser
- Trên FreeBSD, giải mã video bằng phần cứng của Chromium trước đây cần nhiều cờ dòng lệnh
- Tại thời điểm bài viết được viết, giải mã video bằng phần cứng của Chromium hoạt động mà không cần cờ bổ sung
-
MPV
- Nếu thiết lập
hwdec=vaapi-copy,vo=gpu-next,vd-lavc-dr=yes,audio-channels=stereotrongmpv.conf, có thể phát video HD với mức sử dụng CPU thấp
- Nếu thiết lập
Vấn đề đã biết và cách khắc phục tạm thời
-
Mở nắp máy thì laptop lập tức ngủ lại
- Khi KDE đang chạy, môi trường desktop phải phát hiện sự kiện nắp ACPI và xử lý suspend cùng resume
- Trên ThinkPad, có lỗi khiến laptop vừa mở nắp là lập tức quay lại chế độ ngủ
- Cách khắc phục tạm thời là tắt hành động của công tắc nắp máy trong thiết lập nguồn của KDE, rồi cấu hình native suspend khi đóng nắp bằng
devd - Script
/usr/local/libexec/kde-suspendkhóa màn hình của người dùng đang đăng nhập KDE, đợi 0.5 giây rồi đưa máy vào trạng thái ngủ S3 bằngacpiconf -s3 - Quy tắc
/etc/devd/kde-suspend.confchạy script đó khi có sự kiện ACPI Lid0x00
-
Tiến trình vẫn còn sau khi đăng xuất
- Trên FreeBSD, sau khi đăng xuất khỏi phiên KDE, một số tiến trình có thể tiếp tục chạy vô thời hạn
- Chromium đôi khi rơi vào trạng thái tiêu thụ 100% một lõi CPU
- Trên các bản phân phối Linux dựa trên systemd,
systemd-logindsẽ kết thúc các tiến trình liên quan đến phiên người dùng, nhưng trong môi trường KDE của FreeBSD thì giả định đó không đúng - Tận dụng tính năng script dọn dẹp tại thời điểm đăng xuất của KDE để kết thúc
baloo_file,chrome,dirmngr,pipewire,signal-desktop,wireplumberv.v. - Áp dụng bằng cách cho phép thực thi
/usr/local/etc/xdg/plasma-workspace/shutdown/cleanup.sh
-
Chuyển người dùng không hoạt động
- Tính năng chuyển người dùng trên desktop của FreeBSD bị hỏng do lỗi ConsoleKit2 đã tồn tại từ lâu
- Đặt
action/start_new_session=falsevàaction/switch_user=falsetrong/usr/local/etc/xdg/kdeglobalsđể người dùng không thể thử tính năng này
-
WiFi bị lỗi sau khi khôi phục từ chế độ ngủ
- FreeBSD 15.1-RELEASE có lỗi iwlwifi khiến WiFi bị hỏng sau khi resume từ chế độ ngủ
- Cách khắc phục tạm thời là dừng interface
wlan0trước khi suspend và khởi động lại sau khi resume - Script
/usr/local/etc/rc.d/iwlwifi_fixgắnservice netif stop wlan0vàservice netif start wlan0vào các lệnh suspend/resume - Script này được cấp quyền thực thi và bật bằng
iwlwifi_fix_enable="YES" - Bản sửa đã được commit vào 15-STABLE, nên khi FreeBSD 15.2 phát hành thì có thể sẽ không còn cần cách khắc phục này nữa
-
Âm thanh laptop bị treo
- Một số laptop có lỗi i915 gây hard lockup
- Vấn đề đi kèm các lỗi như
hdac0: Command timeout 2trongdmesg - Cách khắc phục là đặt loader tunable
compat.linuxkpi.i915_disable_power_well=0
-
Treo đồ họa và GPU hang
- Trên FreeBSD 15.1, driver DRM mặc định đã được nâng từ 6.6 lên 6.12
- Phiên bản mới dường như có lỗi gây treo đồ họa và thông báo
GPU HANGtrongdmesgtrên một số chip Intel - Cách khắc phục ổn định là tiếp tục dùng phiên bản cũ
drm-66-kmod
-
Không có giới hạn thời gian nhàn rỗi cho console
- FreeBSD đã chuyển từ driver console
syscons(4)cũ sang drivervt(4)native UEFI từ vài năm trước - Console
vtkhông hỗ trợblanktime, nên nếu không có phiên X11 hoặc Wayland thì gần như không có cách tắt màn hình - Vì Ly chạy trên console TTY, màn hình sẽ luôn bật khi chưa có ai đăng nhập
- Trên laptop một người dùng thì đây không phải vấn đề lớn, nhưng trên workstation nhiều người dùng thì lời nhắc đăng nhập có thể gây burn-in trên tấm nền LCD
- FreeBSD đã chuyển từ driver console
-
Thiếu biểu tượng trong ứng dụng GTK4
- Ứng dụng GTK4 đang dùng là Dino IM, một client XMPP, và nhiều biểu tượng không được render, đồng thời cũng không tuân theo thiết lập phông chữ của KDE
- Vấn đề được giải quyết ngay lập tức sau khi tắt portals
- Cách khắc phục tạm thời là đặt
export GDK_DEBUG=no-portals
-
Âm thanh bị ngắt quãng khi phát
- Pulseaudio đôi khi gây crackling và skipping trong lúc phát tệp âm thanh
- Tăng các giá trị mặc định trong
daemon.conflêndefault-fragments = 8vàdefault-fragment-size-msec = 5sẽ giải quyết được vấn đề
1 bình luận
Ý kiến trên Lobste.rs
Cảm ơn vì bài viết này, nhưng có vẻ có quá nhiều bước thủ công cho những việc mà trình cài đặt lẽ ra nên làm thay
Gần đây đã có rất nhiều nỗ lực trong việc chuyển driver Wi‑Fi và đồ họa từ Linux sang, nên giờ nhiều người hơn hẳn có thể dùng nó trên laptop
Có thể nói hiện tại nó đang ở trạng thái giống Linux những năm 2000, vẫn còn nhiều việc phải làm nhưng đây là công việc đang diễn ra ở tuyến đầu
“Nếu không tự làm chừng mười hai bước cài đặt thì có thể nói cái máy đó thực sự là của mình không?” /s mà cũng không hẳn là /s
Tôi đang viết bình luận này trên một chiếc Thinkpad T14 Gen 1 mua đồ cũ để chạy OpenBSD mà không phải vật lộn quá nhiều
Tôi vẫn chưa thử FreeBSD trên đó nhưng chắc rồi cũng sẽ thử, còn chiếc NAS tự ráp của tôi thì đang chạy FreeBSD 15 với một zpool ZFS
Công việc về khả năng tương thích laptop của FreeBSD Foundation thực sự rất đáng cảm kích
Hiện giờ đúng là có không khí kiểu Linux những năm 2000, nhưng như bài gốc nói, đây là “công việc cần làm, và là công việc ở tuyến đầu”
Từ cuối những năm 2010, tôi đã dùng FreeBSD làm hệ điều hành chính hằng ngày trên những chiếc laptop được chọn lựa rất cẩn thận
Khi đó có cực kỳ nhiều thứ phải chỉnh tay trong thiết lập desktop FreeBSD, nên tôi đã biến chúng thành script, đưa vào kho Git và tiếp tục tinh chỉnh dần
Ví dụ như chuyển từ StumpWM sang i3 để chuẩn bị cho khả năng một ngày nào đó phải chuyển từ X sang Sway trên Wayland
Giờ đây đang có một trình cài đặt desktop được phát triển, nên có vẻ sẽ giải quyết được nhận xét xác đáng của @technomancy, và thậm chí có thể khiến khá nhiều script cấu hình của tôi trở nên không còn cần thiết
https://wiki.freebsd.org/desktop-installer
Tôi rất vui khi đọc đoạn: “Nhờ LinuxKPI và driver iwlwifi mới, thời kỳ hỗ trợ Wi‑Fi tệ hại phần lớn đã qua. Nếu bạn có một card Intel phổ biến thì khả năng cao là nó sẽ hoạt động ngay”
Tôi cũng từng thử FreeBSD 13/14 trên desktop, nhưng do hạn chế driver nên tốc độ quá chậm, khó dùng lâu dài
Thật tốt khi những hạn chế này đang biến mất, và lần tới nếu muốn thử gì đó mới trên desktop thì tôi sẽ cân nhắc FreeBSD lần nữa
Điều thú vị là driver Wi‑Fi RTL8812 trên FreeBSD đã có từ rất lâu, theo tôi nhớ là hơn 10 năm rồi, trong khi trên Linux thì mãi đến khoảng kernel 6.13 mới được đưa vào
Tôi cũng không rõ vì sao trên Linux nó lại nằm ngoài cây kernel lâu đến vậy. Có thể là do vấn đề giấy phép