Windows cung cấp cho bạn một triển khai duy nhất của một máy tính để bàn duy nhất trên một triển khai API / khung duy nhất, tất cả được thực hiện bởi Microsoft.
Trên các hệ thống Unix, bạn nhận được API / framework (Hệ thống cửa sổ X11 / X) tồn tại nhiều triển khai (Xorg, Xfree86), trên đó bạn nhận được các API / khung "cấp cao hơn" khác nhau (GTK +, Qt, ... ) bởi vì X11 thô rất nguyên thủy, trên hết bạn có nhiều máy tính để bàn khác nhau (Gnome, KDE, ...), tất cả được thực hiện bởi những người khác nhau.
Ngoài ra, hệ thống X11 đã được thiết kế từ đầu với các GUI từ xa - tức là một máy điện tử hiển thị GUI của ứng dụng chạy từ xa - giới thiệu các khái niệm về "Máy chủ X" và "Máy khách X".
Sau đó, có một danh pháp "cảm nhận" sai cách cho người mới: Máy cục bộ của bạn đang chạy "Máy chủ X" cung cấp dịch vụ "hiển thị GUI", trong khi máy từ xa là "Máy khách X" sử dụng dịch vụ trên máy của bạn để hiển thị GUI.
Vâng, đó là tổng quan nhanh chóng; một khi bạn đã sắp xếp nó ra, việc hiểu bất kỳ bài viết / bài viết diễn đàn nào về chủ đề này sẽ trở nên dễ dàng hơn nhiều.
Chỉnh sửa: Để trả lời hai bình luận đầu tiên của OP.
Có, "X11" chỉ là một giao thức và Xorg / XFree86 là hai triển khai. Ở mức cơ bản, X11 chỉ là về vẽ các đường và dấu chấm, điều này không hữu ích lắm nếu bạn muốn làm GUI.
Trên giao thức X11, mọi người đã triển khai nhiều thứ và thật khó để so sánh 1: 1 với Windows vì Microsoft không bao giờ bận tâm đến việc thực sự tách biệt mọi thứ. Ngoài ra, tôi không phải là nhà phát triển loại GUI, tức là trải nghiệm thực tế của tôi với một trong hai hệ thống là tối thiểu.
Ở phía dưới, "trình quản lý cửa sổ" cung cấp một cửa sổ (xử lý viền, đóng / thu nhỏ / phóng to các nút, thay đổi kích thước, v.v.) và cung cấp "bất động sản" trong cửa sổ cho bộ công cụ widget. Có nhiều trình quản lý cửa sổ, một số bắt chước các hệ thống khác (Windows, MacOS, AmigaOS, bất cứ thứ gì) và chúng hầu như có thể hoán đổi cho nhau trong hệ thống còn lại.
"Bộ công cụ widget" cung cấp cho bạn các nút, thanh trượt, trường văn bản, vv để xây dựng GUI của bạn. Đây là những gì bạn (với tư cách là nhà phát triển ứng dụng) thực sự có thể "nhìn thấy", API khôn ngoan và điều quyết định phần lớn "giao diện" của ứng dụng của bạn.
"Máy tính để bàn" xây dựng một số ứng dụng dựa trên sự kết hợp của bộ công cụ / trình quản lý cửa sổ tiện ích nhất định, để cung cấp giao diện nhất quán. Bạn không cần phải bận tâm đến những thứ này trừ khi bạn thực sự muốn phát triển máy tính để bàn.
Máy tính để bàn "Gnome" sử dụng bộ công cụ tiện ích "GTK +" trên đầu trình quản lý cửa sổ "Metacity".
Máy tính để bàn "KDE" sử dụng bộ công cụ phụ tùng "Qt" trên đầu trình quản lý cửa sổ "KWin".
Lưu ý rằng đặc biệt là cả hai, GTK + và Qt, đã phát triển vượt xa các "bộ công cụ phụ tùng" đơn giản thành "khung phát triển ứng dụng". Nếu bạn muốn phát triển ứng dụng GUI cho Linux, bạn phải chọn một trong hai ứng dụng bạn muốn sử dụng. Có nhiều sự lựa chọn hơn, nếu bạn muốn có một ứng dụng "nhẹ" hơn (không cần phụ thuộc vào thư viện lớn), nhưng ngày nay hầu hết các hệ thống đều có cài đặt lib GTK + và Qt.
Hoàn toàn có thể sử dụng các ứng dụng Qt trên máy tính để bàn Gnome hoặc ứng dụng GTK + trên máy tính để bàn KDE (không phải lúc nào cũng như vậy), vì vậy bạn phải lo lắng về khả năng tương thích. Đưa ra lựa chọn giữa hai ứng dụng có chức năng tương đương, mọi người thường sẽ thích ứng dụng sử dụng các tiện ích "gốc" trên máy tính để bàn của họ, nhưng tôi không lo lắng về điều đó.
Khác, các gạch đầu dòng quan trọng hơn trong việc lựa chọn "bộ công cụ phụ tùng": Điều khoản cấp phép, hỗ trợ cho ngôn ngữ bạn chọn, khả năng tương thích đa nền tảng.
Post Scriptum : Quay trở lại vài năm sau, tôi đã tự mình nắm bắt một số kinh nghiệm lập trình GUI và nhận ra một điều còn thiếu trong phần giải thích ở trên nếu bạn đang tìm kiếm một lời khuyên "đi theo con đường nào": wxWidgets . Đây là một khung xây dựng dựa trên bất kỳ thứ gì bạn đang sử dụng nguyên bản và cho phép phát triển GUI di động trong suốt mà không làm giảm hiệu suất hoặc có bất kỳ chuỗi cấp phép nào được đính kèm. API C ++. Đó là con đường tôi đã chọn cho nhu cầu GUI của mình và tôi cảm thấy nó nên được đề cập cho đầy đủ.