Gecko (bộ máy trình bày)

**Gecko** là một bộ máy trình bày được phát triển bởi Mozilla. Nó được sử dụng trong trình duyệt Firefox, email client Thunderbird và nhiều dự án khác

Gecko được thiết kế để hỗ trợ chuẩn Internet mở, và được dùng bởi những ứng dụng khác nhau để hiển thị trang web và, trong một số trường hợp chính giao diện người dùng của ứng dụng (bằng cách render XUL). cung cấp API lập trình phong phú giúp nó phù hợp với nhiều vai trò khác nhau trong các ứng dụng hỗ trợ Internet, như trình duyệt web, trình bày nội dung và client/server.

Gecko được viết bằng C++ và JavaScript, và từ năm 2016, bổ sung thêm Rust. Nó là phần mềm tự do nguồn mở tuân theo các điều khoản của Mozilla Public License v2. Mozilla chính thức hỗ trợ nó trên Android, Linux, macOS, và Windows.

## Lịch sử
Việc phát triển công cụ bố trí hiện được gọi là Gecko bắt đầu tại Netscape năm 1997, sau khi công ty này mua DigitalStyle. Công cụ kết xuất Netscape hiện tại, ban đầu được viết cho Netscape Navigator 1.0 và nâng cấp qua nhiều năm, là chậm chạp, không tuân thủ các tiêu chuẩn W3C, và hỗ trợ cho hạn chế HTML động và thiếu các tính năng như phản xạ tăng dần (khi công cụ bố trí sắp xếp lại các yếu tố trên màn hình dưới dạng dữ liệu mới đã được tải xuống và thêm vào trang). Công cụ bố trí mới được phát triển song song với cái cũ, với ý định tích hợp nó vào Netscape Communicator khi nó trưởng thành và ổn định. Ít nhất một phiên bản chính nữa của Netscape dự kiến sẽ được phát hành với công cụ bố trí cũ trước khi chuyển đổi.

Sau khi khởi động dự án Mozilla vào đầu năm 1998, mã nguồn công cụ trình bày mới đã được phát hành theo giấy phép nguồn mở. Ban đầu được tiết lộ là *Raptor*, tên gọi được đổi thành *NGLayout* (next generation layout) do các vấn đề về thương hiệu. Netscape sau đó đổi thương hiệu NGLayout thành *Gecko*. Trong khi Mozilla Organisation (tiền thân của Mozilla Foundation) ban đầu tiếp tục sử dụng tên NGLayout (Gecko là nhãn hiệu của Netscape), cuối cùng thương hiệu Gecko đã chiến thắng.

Tháng 10 năm 1998, Netscape tuyên bố rằng trình duyệt tiếp theo của nó sẽ sử dụng Gecko (vẫn được gọi là NGLayout vào thời điểm đó) chứ không phải là công cụ trình bày cũ, yêu cầu phải viết lại phần lớn ứng dụng. Mặc dù quyết định này rất được ủng hộ bởi những người ủng hộ tiêu chuẩn web, nhưng nó hầu như không được ủng hộ bởi các nhà phát triển Netscape, họ không hài lòng với sáu tháng được đưa ra để viết lại. Điều đó cũng có nghĩa là hầu hết các công việc được thực hiện cho Netscape Communicator 5.0 (bao gồm cả việc phát triển các cải tiến của Mariner cho công cụ trình bày cũ) đã phải từ bỏ. Netscape 6, bản phát hành Netscape đầu tiên kết hợp với Gecko, được phát hành vào tháng 11 năm 2000 (tên Netscape 5 không bao giờ được sử dụng).

Khi Gecko tiếp tục phát triển, các ứng dụng và hệ thống nhúng khác bắt đầu sử dụng nó. America Online, vào thời điểm này, công ty mẹ của Netscape, cuối cùng đã chấp nhận sử dụng nó CompuServe 7.0 và AOL cho Mac OS X (những sản phẩm này đã nhúng Internet Explorer trước đó). Tuy nhiên, ngoại trừ một vài beta, Gecko không bao giờ được sử dụng trong ứng dụng khách Microsoft Windows AOL chính.

Ngày 15 tháng 7 năm 2003, AOL đã sa thải các nhà phát triển Gecko còn lại và Quỹ Mozilla (được thành lập cùng ngày) trở thành người quản lý chính cho sự phát triển của Gecko. Ngày nay, Gecko được phát triển bởi các nhân viên của Tập đoàn Mozilla, nhân viên của các công ty đóng góp cho dự án Mozilla và các tình nguyện viên.

Tháng 10 năm 2016, Mozilla đã công bố Quantum, một dự án đang tiếp tục bao gồm một số nỗ lực phát triển phần mềm để "xây dựng công cụ web thế hệ tiếp theo cho người dùng Firefox". Nó bao gồm nhiều cải tiến cho Gecko, được lấy từ dự án thử nghiệm Servo. Firefox 57, còn được gọi là "Firefox Quantum", phát hành lần đầu vào tháng 11 năm 2017, là phiên bản đầu tiên bao gồm các thành phần chính từ các dự án Quantum/Servo được kích hoạt. Chúng bao gồm gia tăng hiệu trong các thành phần kết xuất CSS và GPU. Các thành phần bổ sung sẽ được hợp nhất từ Servo sang Gecko tăng dần trong các phiên bản trong tương lai.

Tháng 9 năm 2018, Mozilla đã công bố GeckoView, nền tảng của thế hệ sản phẩm di động tiếp theo của Mozilla dựa trên thư viện phần mềm giúp Gecko có thể tái sử dụng cho Android, bao gồm các nỗ lực phát triển phần mềm mới hơn để "tách rời công cụ khỏi giao diện người dùng và dễ dàng nhúng vào các ứng dụng khác". Firefox Focus 7.0, được xuất xưởng trong cùng tháng, là phiên bản ban đầu được giới thiệu GeckoView, với hiệu suất tăng trong tải trang trung bình. Firefox Reality cũng được xây dựng với GeckoView. Tháng 6 năm 2019, Mozilla đã công bố Firefox Preview là một dự án đang diễn ra tập trung vào việc xây dựng trình duyệt web Android với GeckoView.

## Tiêu chuẩn hỗ trợ
Ngay từ đầu, Gecko đã được thiết kế để hỗ trợ các tiêu chuẩn Internet mở. Một số tiêu chuẩn mà Gecko hỗ trợ bao gồm:

* CSS Level 2.1 (hỗ trợ một phần cho CSS 3) 
* DOM Level 1 và 2 (hỗ trợ một phần cho DOM 3) 
* HTML 4 (hỗ trợ một phần cho HTML5) 
* JavaScript 1.8.5 (hỗ trợ ECMAScript 5.1 đầy đủ), triển khai trong SpiderMonkey 
* Toán học 
* RDF 
* XForms (thông qua một phần mở rộng chính thức) 
* XHTML 1.0 
* XML 1.0 
* XSLT và XPath, được triển khai trong TransforMiiX

Gecko cũng hỗ trợ một phần SVG 1.1. Phông chữ SVG, cấu hình màu, hình động, chế độ xem và mô-đun con trỏ vẫn chưa được triển khai và các mô-đun bộ lọc và văn bản chỉ được thực hiện một phần. Các mô-đun mở rộng cũng được thực hiện nhưng hiện đang bị vô hiệu hóa.

Để hỗ trợ các trang web được thiết kế cho các phiên bản kế thừa của Netscape và Internet Explorer, Gecko hỗ trợ chuyển đổi DOCTYPE. Các tài liệu có DOCTYPE hiện đại được hiển thị ở chế độ tuân thủ tiêu chuẩn, tuân thủ nghiêm ngặt các tiêu chuẩn W3C. Các tài liệu không có DOCTYPE hoặc DOCTYPE cũ hơn được hiển thị ở chế độ quirks, mô phỏng một số điểm kỳ lạ không chuẩn của Netscape Communicator 4.x; tuy nhiên, một số tính năng 4.x (như layers) không được hỗ trợ.

Gecko cũng hỗ trợ hạn chế cho một số tính năng Internet Explorer không chuẩn, chẳng hạn như phần tử marquee và thuộc tính `document.all` (mặc dù các trang kiểm tra rõ ràng cho `document.all` sẽ được thông báo rằng nó không được hỗ trợ).

## Sử dụng
Gecko chủ yếu được sử dụng trong các trình duyệt web, sớm nhất là Netscape 6 và Mozilla Suite (sau đổi tên thành SeaMonkey). Nó cũng được sử dụng trong các dẫn xuất trình duyệt web khác của Mozilla như Firefox và Firefox cho thiết bị di động và việc triển khai bản sao Internet Explorer là một phần của Wine. Mozilla cũng sử dụng nó trong ứng dụng email Thunderbird của họ.

Các trình duyệt web khác sử dụng Gecko bao gồm GNU IceCat, Waterfox, K-Meleon, Lunascape, Portable Firefox, Conkeror, Classilla, TenFourFox.

Các sản phẩm khác sử dụng Gecko bao gồm Nightingale, Instantbird và phần mềm tổ chức hình ảnh của Google Picasa (dành cho Linux).

Gecko cũng được Sugar sử dụng cho máy tính OLPC XO-1. Gecko được sử dụng như là một triển khai hoàn chỉnh của XUL (Ngôn ngữ giao diện người dùng XML). Gecko hiện đang định nghĩa đặc tả XUL.

### Người dùng trước đây
Các sản phẩm đã sử dụng Gecko trong lịch sử bao gồm Pale Moon (hiện đang sử dụng Goanna), Songbird, Epiphany (hiện được gọi là Gnome Web) và Gnome DevHelp đều đã thay thế Gecko bằng WebKitGTK, Sunbird (lịch) và các trình duyệt web khác bao gồm Swiftfox, Flock, Galeon, Camino, Minimo, Beonex Communicator, Kazehakase và MicroB.

### Phụ thuộc độc quyền
Trên Windows và các nền tảng khác, Gecko phụ thuộc vào trình biên dịch độc quyền. Do đó, các bản phân phối FOSS của Linux không thể bao gồm gói Gecko được sử dụng trong Wine.

Sau Gecko 2.0, số phiên bản được tăng lên 5.0 để phù hợp với Firefox 5 và từ đó trở đi đã được giữ đồng bộ với số phiên bản chính cho cả Firefox và Thunderbird, để phản ánh thực tế rằng nó không còn là một thành phần riêng biệt.

## Phình to
Trong kỷ nguyên Netscape, sự kết hợp của các quyết định quản lý và kỹ thuật kém dẫn đến sự phình to của phần mềm Gecko. Do đó, vào năm 2001, Apple đã chọn rẽ nhánh KHTML chứ không phải Gecko để tạo công cụ WebKit cho trình duyệt Safari của mình. Tuy nhiên, đến năm 2008, Mozilla đã giải quyết một số vấn đề khó khăn, dẫn đến cải thiện hiệu suất lớn cho Gecko.

## Quantum
**Quantum** là một dự án Mozilla bao gồm một số nỗ lực phát triển phần mềm để "xây dựng công cụ web thế hệ tiếp theo cho người dùng Firefox". Nó bao gồm nhiều cải tiến cho Gecko, phần lớn được kết hợp từ dự án Servo thử nghiệm. Quantum cũng bao gồm các sàng lọc cho giao diện người dùng và các tương tác.

Firefox 57, được phát hành vào tháng 11 năm 2017, là phiên bản đầu tiên có kịch hoạt thành phần Servo. Mozilla đặt tên cho phiên bản này và các kế hoạch phát hành trong tương lai là "Firefox Quantum".

### Bối cảnh
Năm 2013, Mozilla đã bắt đầu dự án Servo thử nghiệm, đây là một công cụ được thiết kế từ đầu với mục tiêu cải thiện tính đồng thời và song song đồng thời giảm các lỗ hổng an toàn bộ nhớ. Một yếu tố quan trọng là viết Servo bằng ngôn ngữ lập trình Rust, cũng được tạo bởi Mozilla, được thiết kế để tạo mã được biên dịch với độ an toàn bộ nhớ, đồng thời và song song tốt hơn so với mã C++ được biên dịch.

Kể từ tháng 4 năm 2016, Servo cần ít nhất vài năm phát triển để trở thành một công cụ trình bày đầy đủ tính năng. Do đó, họ quyết định bắt đầu dự án Quantum để đưa các phần Servo ổn định vào Firefox.

### Thành phần
Dự án Quantum bao gồm một số tiểu dự án.

* **CSS**: Hệ thống CSS song song của Servo được tích hợp vào Gecko. Điểm chuẩn cho thấy hiệu năng quy mô tuyến tính với số lượng lõi CPU. Điều này đã được phát hành trong Firefox 57. 
* **Render**: Kiến trúc kết xuất của Servo, được gọi là WebRender, được tích hợp vào Gecko. WebRender thay thế mô hình vẽ chế độ tức thời bằng mô hình chế độ giữ lại được GPU tăng tốc dễ dàng hơn bằng cách tận dụng sự tương tự của CSS/DOM với biểu đồ cảnh. Kết xuất tình huống xấu nhất trong thử nghiệm vượt quá 60 khung hình mỗi giây. 
* **Compositor**: Bộ tổng hợp hiện tại của Gecko đã chuyển sang quy trình riêng của mình, cách ly các tab trình duyệt khỏi các sự cố liên quan đến trình điều khiển đồ họa. Vì các sự cố của bộ tổng hợp sẽ không làm giảm quá trình nội dung trình duyệt, quá trình tổng hợp có thể được khởi động lại một cách minh bạch mà không làm mất dữ liệu người dùng. Nó đã được phát hành trong Firefox 53. 
* **DOM**: Lấy cảm hứng cơ bản từ kiến trúc Constellation của Servo và công cụ Presto của Opera, DOM lượng tử sử dụng các luồng được lên lịch hợp tác trong DOM để tăng khả năng phản hồi mà không làm tăng số lượng quá trình và do đó, sử dụng bộ nhớ. 
* **Flow**: Một chiếc ô cho người dùng cải thiện hiệu suất có thể nhìn thấy được điều khiển bởi một nhóm làm việc trên các thành phần của Gecko. Hiện tại tập trung vào cải tiến hiệu suất người dùng thực trên các ứng dụng web lớn, chủ yếu là G Suite và Facebook. 
* **Photon**: Làm mới giao diện người dùng của toàn bộ ứng dụng, tập trung mạnh vào việc cải thiện hiệu suất UI. Được coi là một dự án chị em với Quantum Flow. Nó đã được phát hành trong Firefox 57. 
* **Mạng**: Cải thiện hiệu suất của Necko, lớp mạng của Gecko, bằng cách di chuyển thêm hoạt động mạng ra khỏi luồng chính, ưu tiên phụ thuộc vào ngữ cảnh của các luồng mạng và chạy đua lớp bộ đệm với mạng. Tính năng này đã được phát hành trong Firefox 59.

## Azure
Dự án **Mozilla Azure**  là API trừu tượng hóa đồ họa cấp thấp không trạng thái được sử dụng trong Firefox. Dự án có một số mục tiêu bao gồm khả năng tương thích Direct2D chính xác hơn, khả năng tương tác trạng thái được tối ưu hóa và kiểm soát cải thiện các đặc tính và lỗi hiệu suất. Azure cung cấp khả năng tăng tốc phần cứng 2D trên backend đồ họa 3D. Firefox bắt đầu sử dụng Azure thay vì Cairo năm 2012. Nó được viết bằng C++ và được dùng bởi Servo. Tên gọi Azure là một sự ca ngợi người sáng lập Netscape James H. Clark và công việc trước đây của anh tại  SGI. Jim Clark sáng chế ra Geometry Engine tại Stanford University năm 1979, đây là GPU đầu tiên. Silicon Graphics cũng là nhà phát triển ban đầu của OpenGL.

## Chú thích

## Liên kết ngoài

* Gecko - Mozilla Developer Network 
* Gecko development wiki (wiki.mozilla.org)
* Mozilla Product Strategy Proposal (DRAFT)
* Web Browser Standards Support
* JRex  (Java API for Gecko)