Sửa lỗi UI Linux tồn tại 20 năm: Nhà phát triển còn trẻ hơn cả phần mềm

15 tháng 4, 2026·4 phút đọc

Kamila Szewczyk, một nhà phát triển phần mềm 21 tuổi, đã thành công trong việc khắc phục một lỗi tồn tại suốt hai thập kỷ trong Enlightenment E16. Cô cho rằng phần mềm cũ thường ổn định hơn vì chúng được coi là đã "hoàn thiện", trái ngược với xu hướng liên tục cập nhật tính năng mới nhưng thiếu ổn định của phần mềm hiện đại.

Sửa lỗi UI Linux tồn tại 20 năm: Nhà phát triển còn trẻ hơn cả phần mềm

Sửa lỗi UI Linux tồn tại 20 năm: Nhà phát triển còn trẻ hơn cả phần mềm

Kamila Szewczyk, một nhà phát triển phần mềm 21 tuổi, đã thành công trong việc khắc phục một lỗi tồn tại suốt hai thập kỷ trong Enlightenment E16. Cô cho rằng phần mềm cũ thường ổn định hơn vì chúng được coi là đã "hoàn thiện", trái ngược với xu hướng liên tục cập nhật tính năng mới nhưng thiếu ổn định của phần mềm hiện đại.

Một lỗi "già" như phần mềm

Đối với những người chưa quen thuộc, E16 là nhánh DR16 lâu đời của Enlightenment, một trình quản lý cửa sổ (window manager) cho Linux lần đầu tiên xuất hiện trong thế giới phần mềm mã nguồn mở (FOSS) vào năm 1997. Phiên bản E16 ra mắt vào năm 1999 và vẫn được duy trì cho đến ngày nay bởi một nhóm nhỏ các nhà phát triển tận tụy.

Szewczyk, hiện là sinh viên sau đại học tại Đại học Saarland ở Đức, chia sẻ rằng cô thuộc về một cộng đồng nhỏ những "người đam mê cứng cỏi" vẫn sử dụng và duy trì trình quản lý cửa sổ cũ kỹ này.

Tìm ra nguyên nhân từ một bài giảng

Trong một bài đăng trên blog cá nhân, Szewczyk kể lại rằng cô đã phát hiện ra lỗi này trong khi chuẩn bị slide bài giảng cho một khóa học mà cô đang giảng dạy.

"Tôi có một vài tệp PDF chứa slide bài giảng và phiếu bài tập được soạn thảo bằng LaTeX. Tại một thời điểm, tôi mở một trong số chúng bằng Atril, và cả màn hình desktop đều bị treo," Szewczyk viết.

Sự cố này lặp đi lặp lại cho đến khi cô tìm ra nguyên nhân gốc rễ: E16 bị treo mỗi khi cố gắng cắt ngắn (truncate) tên tệp quá dài mà cô đang làm việc.

Cơ chế lỗi và bản vá

Sau một thời gian điều tra, Szewczyk xác định rằng E16 đã triển khai thuật toán cắt ngắn tiêu đề cửa sổ mà không có giới hạn số lần lặp (iteration limit). Nếu không có giới hạn này, quá trình tìm kiếm dấu chấm lửng ở giữa (middle-ellipsis) có thể bị nảy qua lại giữa các điểm cắt ngắn vô tận, làm treo máy tính trong khi nó cố gắng xác định tiêu đề.

"Bất kỳ cửa sổ nào có WM_NAME đủ dài sao cho tìm kiếm dấu chấm lửng ở giữa rơi vào chế độ quá mức (overshoot regime) đều sẽ tái tạo lỗi này," Szewczyk giải thích.

Bản vá mà cô công bố cho E16 phiên bản 1.0.30 (ra mắt tháng 8/2024) đã thực hiện ba thay đổi để ngăn chặn vấn đề này tái diễn: giới hạn số lần lặp ở mức 32, ngăn chặn các sửa đổi âm tạo ra sự chồng chéo degenerate và bảo vệ chống lại lỗi chia cho 0 (divide-by-zero).

Triết lý "phần mềm đã hoàn thiện"

Szewczyk thừa nhận mình có chút định kiến chống lại các môi trường desktop hiện đại. Cô tin rằng triết lý phát triển phần mềm hiện đại mà các sản phẩm này tuân theo là phản tác dụng và kém an toàn hơn cho người dùng.

"Tôi cảm thấy chúng ta đã lạc hướng một chút. Chúng ta không đủ khao khát để thừa nhận rằng phần mềm có thể hoàn thiện hơn hoặc ít hơn ở một thời điểm nào đó," Szewczyk chia sẻ.

Cô lấy ví dụ về E16: chắc chắn, nó đã có các phiên bản mới trong nhiều thập kỷ tồn tại, nhưng những phiên bản đó chủ yếu là sửa lỗi và một vài thay đổi cơ bản, không phải là một lượng lớn các tính năng mới không cần thiết.

"Chúng ta vẫn tiếp tục tung ra sự bất ổn mà chúng ta không cần phải tung ra," Szewczyk nhận định. Cô khuyên người dùng hoặc quản trị viên nên ngừng việc đuổi theo mọi thứ mới mẻ, đặc biệt là với các phần mềm thường đi kèm nhiều lỗi như trình duyệt web. Thay vào đó, hãy ở lại các bản phát hành hỗ trợ dài hạn (LTS) hoặc các bản cập nhật mở rộng.

"Số lượng lỗi trong các bản kiểm soát riêng tư của phần mềm cũ kỹ được duy trì bởi các nhà phát triển có năng lực sẽ giảm dần theo đơn điệu," Szewczyk kết luận.

Bài viết được tổng hợp và biên soạn bằng AI từ các nguồn tin tức công nghệ. Nội dung mang tính tham khảo. Xem bài gốc ↗