Đa nền tảng

Trong công nghệ điện toán, **đa nền tảng** (tiếng Anh: **cross-platform** hay **multi-platform**) là một thuật ngữ chỉ các phần mềm máy tính hay các phương thức điện toán và các khái niệm được thực thi đầy đủ và vận hành cùng nhau trên nhiều nền tảng máy tính.  Phần mềm đa nền tảng có thể được chia thành hai loại; một loại yêu cầu phải thiết kế hoặc biên dịch từng phiên bản cho mỗi nền tảng nó hỗ trợ; loại kia có thể chạy trực tiếp trên bất cứ nền tảng nào mà không cần sự chuẩn bị thêm đặc biệt nào - chẳng hạn như phần mềm được viết bằng một ngôn ngữ thông dịch hay được biên dịch trước sang mã bytecode có khả năng di động bằng một trình thông dịch hay các gói run-time thường dùng hoặc là thành phần tiêu chuẩn trên mọi nền tảng.

Lấy ví dụ, một ứng dụng đa nền tảng có thể chạy trên cả Microsoft Windows với kiến trúc x86, Linux với kiến trúc x86 và Mac OS X với cả kiến trúc PowerPC hay x86 trên các hệ thống Macintosh. Một ứng dụng đa nền tảng có thể chạy trên từ 2 nền tảng khác nhau cho đến mọi nền tảng đang tồn tại.

## Các nền tảng

Một nền tảng là một sự kết hợp từ hai yếu tố phần cứng và phần mềm được dùng để chay các phần mềm ứng dụng. Một nền tảng có thể được miêu tả đơn giản như một hệ điều hành hay kiến trúc máy tính, hay sự kết hợp của cả hai. Một nền tảng thường thấy nhất có lẽ là Microsoft Windows chạy trên kiến trúc x86. Những nền tảng máy tính cá nhân quen thuộc khác bao gồm Linux và Mac OS X (chính cả hai hệ điều hành này cũng là đa nền tảng). Tuy nhiên cũng có nhiều thiết bị như điện thoại di động cũng là những nền tảng máy tính thường thấy tuy chúng ít khi được nói đến trên phương diện này. Phần mềm ứng dụng có thể được viết phụ thuộc vào các đặc điểm của một nền tảng đặc biệt - hoặc phần cứng, hoặc hệ điều hành, hoặc máy ảo nó chạy trên đó. Nền tảng Java là một nền tảng máy ảo chạy trên nhiều hệ điều hành và nhiều loại phần cứng, và là một nền tảng quen thuộc cho việc viết các phần mềm chạy trên nó.

### Các nền tảng phần cứng
Một **nền tảng phần cứng** có thể nói đến một kiến trúc của một máy tính hay kiến trúc bộ xử lý. Ví dụ, kiến trúc CPU x86 và x86-64 là một kiến trúc máy tính thường thấy nhất trong các máy tính cá nhân hiện nay. Những máy tính này thường chạy dòng hệ điều hành Microsoft Windows, mặc dù chúng có thể chạy những hệ điều hành khác như Linux, OpenBSD, NetBSD, Mac OS X và FreeBSD.

### Các nền tảng phần mềm
Các nền tảng phần mềm có thể là một hệ điều hành hoặc môi trường lập trình, nhưng thông thường hơn cả là sự kết hợp cả hai. Một ngoại lệ quen thuộc là ngôn ngữ Java, sử dụng một máy ảo độc lập với hệ điều hành trong việc biên dịch mã của nó, thường được gọi trong thế giới Java là bytecode. Những ví dụ về các nền tảng phần mềm bao gồm:

* MS-DOS (x86), DR-DOS (x86), FreeDOS (x86)....
* Microsoft Windows (x86, x64)
* Linux (x86, x64, PowerPC, và nhiều kiến trúc đa dạng khác)
* Mac OS X (PowerPC, x86)
* OS/2, eComStation
* AmigaOS (m68k), AROS (x86, PowerPC, m68k), MorphOS (PowerPC)
* Java
* 1C:DOANH NGHIỆP

## Phần mềm đa nền tảng?
Để một phần mềm được gọi là **đa nền tảng**, nó phải có khả năng hoạt động trên nhiều hơn một kiến trúc máy tính hay hệ điều hành. Trong đó thời gian hay hiệu quả của tác vụ có thể khác nhau do các hệ điều hành khác nhau có các giao diện lập trình ứng dụng (API) khác nhau (ví dụ, Linux sử dụng một API cho phần mềm ứng dụng khác với của Microsoft Windows).

Vì một hệ điều hành đặc thù có thể chạy trên các kiến trúc máy tính khác nhau, nên không có nghĩa phần mềm được viết cho một hệ điều hành sẽ tự động làm việc trên tất cả các kiến trúc mà hệ điều hành đó hỗ trợ. Một ví dụ là vào tháng 8 năm 2006, OpenOffice.org, đã không chạy trên các dòng vi xử lý AMD64 hay EM64T vốn là các tiêu chuẩn x86-64 64-bit cho các máy tính; điều này sau đó đã được thay đổi, và bộ phần mềm OpenOffice.org hầu như được điều chỉnh tương thích với các hệ thống 64-bit http://wiki.services.openoffice.org/wiki/Porting_to_x86-64_(AMD64,_EM64T). Điều này cũng có nghĩa là nếu một phần mềm được viết bằng những ngôn ngữ lập trình thông dụng như C hay C++ thì cũng không có nghĩa là nó sẽ chạy trên tất cả các hệ điều hành hỗ trợ ngôn ngữ lập trình đó.

## Xem thêm
* Máy ảo
*Nền Java
* Các ngôn ngữ lập trình:
** Các loại:
*** Các ngôn ngữ biên dịch
**** REALbasic trình biên dịch đa nền cho Windows, Macintosh và Linux
**** trình biên dịch đa nền
*** Các ngôn ngữ văn lệnh
*** Các ngôn ngữ thông dịch
** Perl, PHP, Python, Tcl, JavaScript, XUL, ECMAScript—một số ngôn ngữ thông dịch/văn lệnh thường dùng trong các phần mềm ứng dụng đa nền.
* wxWidgets, Qt, GTK+, Tk, FLTK—một số bộ công cụ đa nền
* Các thư viện lập trình:
** Allegro—một thư viện multimedia đa nền viết bằng C
* Kiến trúc máy tính
* Các ví dụ:
** C-Kermit, bản hiện thực giao thức Kermit.
** Firefox—một trình duyệt web đa nền, với mã nguồn mở
** Free Pascal—một trình biên dịch đa nền, với mã nguồn mở, cho Pascal và Object Pascal
** Info-ZIP, bản hiện thực hoá định dạng file zip
** Pixel Image Editor, trình biên tập ảnh giống Photoshop viết bằng Free Pascal
** KPTools Skeet—tường lửa đa nền với mã nguồn mở
** OpenOffice.org—gói phần mềm văn phòng mã nguồn mở
** Blender—phần mềm đồ hoạ 3 chiều đa nền, với mã nguồn mở
** MAME—giả lập trò chơi điện tử hộp
** Linux, NetBSD, OpenBSD, FreeBSD—các hệ điều hành đa nền với mã nguồn mở
** MySQL, PostgreSQL—các hệ quản trị cơ sở dữ liệu đa nền với mã nguồn mở
** VLC—các trình đa phương tiện đa nền với mã nguồn mở

## Chú thích