Porting

Trong công nghệ phần mềm, porting là quá trình thích ứng phần mềm với mục đích đạt được một dạng thực thi nào đó trong môi trường điện toán khác (ví dụ: CPU, hệ điều hành hoặc thư viện bên thứ ba khác) với thiết kế ban đầu của một chương trình. Thuật ngữ này cũng được sử dụng khi phần mềm/phần cứng được thay đổi để làm cho chúng có thể sử dụng được trong các môi trường khác nhau.
Phần mềm là có tính di động khi chi phí porting nó vào một nền tảng mới thấp hơn so với chi phí của việc viết nó từ đầu một cách đáng kể.

Từ nguyên

Thuật ngữ "port" bắt nguồn từ từ Latin portāre, có nghĩa là "mang theo".  Khi mã lệnh không tương thích với một hệ điều hành hoặc kiến ​​trúc cụ thể, mã lệnh phải được "chuyển" sang hệ thống mới.
Thuật ngữ này thường không được áp dụng cho quá trình điều chỉnh phần mềm để chạy với bộ nhớ ít hơn trên cùng một CPU và hệ điều hành, cũng không áp dụng cho việc viết lại mã nguồn bằng một ngôn ngữ khác (tức là chuyển đổi hoặc dịch thuật).
Các nhà phát triển phần mềm thường cho rằng phần mềm mà họ viết là di động, có nghĩa là chỉ cần ít nỗ lực để thích ứng với môi trường mới. Số lượng nỗ lực thực sự cần phụ thuộc vào một số yếu tố, bao gồm mức độ khác nhau môi trường ban đầu (nền tảng nguồn) với môi trường mới (nền tảng mục tiêu), kinh nghiệm của các tác giả gốc khi biết cấu trúc ngôn ngữ lập trình và các lời gọi thư viện bên thứ ba dường như không thể di chuyển được và nỗ lực của các tác giả ban đầu chỉ sử dụng các cấu trúc di động (các cấu trúc nền tảng cụ thể thường cung cấp một giải pháp rẻ hơn).

Lịch sử

Số lượng CPU và hệ điều hành khác nhau đáng kể được sử dụng trên máy tính để bàn hiện nay nhỏ hơn nhiều so với trước đây. Sự thống trị của kiến ​​trúc x86 có nghĩa là hầu hết các phần mềm máy tính để bàn không bao giờ được chuyển đến một CPU khác. Trong cùng một thị trường, sự lựa chọn của các hệ điều hành đã được giảm xuống một cách hiệu quả thành ba: Microsoft Windows, macOS và Linux.  Tuy nhiên, trong các hệ thống nhúng và thị trường di động, tính di động vẫn là một vấn đề quan trọng, với ARM là một sự thay thế được sử dụng rộng rãi.
Các tiêu chuẩn quốc tế, như được ban hành bởi ISO, tạo điều kiện thuận lợi cho việc chuyển đổi bằng cách chỉ định các chi tiết của môi trường tính toán theo cách giúp giảm sự khác biệt giữa các nền tảng tuân thủ tiêu chuẩn khác nhau. Viết phần mềm nằm trong giới hạn được chỉ định bởi các tiêu chuẩn này đại diện cho một nỗ lực thực tế mặc dù không tầm thường. Việc port một chương trình như vậy giữa hai nền tảng tuân thủ tiêu chuẩn (giống như POSIX.1) có thể chỉ là vấn đề tải mã nguồn và biên dịch lại nó trên nền tảng mới. Tuy nhiên, thực tế thường thấy rằng các sửa đổi nhỏ khác nhau là bắt buộc, do sự khác biệt nền tảng tinh tế. Hầu hết các tiêu chuẩn bị "vùng xám" nơi khác biệt trong việc giải thích các tiêu chuẩn dẫn đến các biến thể nhỏ từ nền tảng đến nền tảng.
Ngoài ra, còn có một số công cụ hỗ trợ chuyển đổi, chẳng hạn như  GNU Compiler Collection, cung cấp các ngôn ngữ lập trình nhất quán trên các nền tảng khác nhau, và Autotools, tự động phát hiện các biến thể nhỏ trong môi trường và điều chỉnh phần mềm tương ứng trước khi biên dịch.
Các trình biên dịch cho một số ngôn ngữ lập trình bậc cao (e.g. Eiffel, Esterel)  có được tính di động bằng cách xuất mã nguồn ở một ngôn ngữ trung gian bậc cao khác (giống như C) mà trình biên dịch cho nhiều nền tảng thường có sẵn.
Hai hoạt động liên quan đến (nhưng khác biệt) porting là mô phỏng và biên dịch chéo.

Port video game

Porting cũng là thuật ngữ được sử dụng khi video game được thiết kế để chạy trên một nền tảng, có thể là arcade, video game console, hay PC, được chuyển đổi để chạy trên nền tảng khác. Trước đó trò chơi video "port" thường không phải port thật sự, nhưng thay vì phiên bản làm lại của trò chơi. Tuy nhiên, nhiều trò chơi video thế kỷ 21 được phát triển bằng phần mềm (thường trong C++) có thể xuất mã cho một hoặc nhiều consoles cũng như cho PC mà không cần phải port thực tế (thay vì dựa vào việc chuyển đổi chung thư viện thành phần riêng lẻ).
Nhiều port ban đầu bị các vấn đề về chất lượng gameplay đáng kể vì các máy tính khác nhau rất nhiều. Richard Garriott đã tuyên bố vào năm 1984 tại Origins Game Fair rằng  Origin Systems  đã phát triển trò chơi máy tính cho dòng Apple II trước rồi chuyển chúng sang  Commodore 64 và Atari 8-bit, bởi vì các sprites của máy sau này và các tính năng tinh vi khác được port từ chúng sang Apple "khó khăn hơn nhiều, có lẽ thậm chí không thể". Nhận xét phàn nàn về các ports ảnh hưởng từ "Apple conversionitis", giữ lại "âm thanh tệ hại và đồ họa màu đen-trắng-xanh-tím" của Apple; sau tuyên bố của Garriott, khi Dan Bunten hỏi "người dùng Atari và Commodore trong số khán giả, Bạn có hài lòng với cá bài viết của Apple không?" khán giả hét lên "Không!", Garriott trả lời,, "[Nếu không] phiên bản Apple sẽ không bao giờ được thực hiện. Từ quan điểm của nhà xuất bản không phải là tiền khôn ngoan".
Những nhóm làm việc khác. Ozark Softscape, ví dụ, đã viết M.U.L.E. cho Atari đầu tiên bởi vì họ thích phát triển cho các máy tính tiên tiến nhất, loại bỏ hoặc thay đổi các tính năng khi cần thiết trong quá trình chuyển port. Chính sách như vậy không phải lúc nào cũng khả thi; Bunten nói rằng "M.U.L.E. không thể hoàn tất cho Apple",, và rằng các phiên bản phi-Atari của The Seven Cities of Gold đều thua kém.
Khi một trò chơi được gọi là "arcade hoàn hảo", điều nàyđ có nghĩa là trò chơi đã được chuyển từ phiên bản arcade sang nền tảng khác, chẳng hạn như console hay máy tính, mà không có bất kỳ thay đổi đáng kể nào đối với hoạt động của trò chơi. Điều này có nghĩa là đồ họa, âm thanh và lối chơi, cùng với các đặc điểm khác của trò chơi (bao gồm cả lỗi), là trung thành với phiên bản arcade. Nó là một thuật ngữ chủ yếu được sử dụng bởi các nhà phê bình chuyên nghiệp và đôi khi, nhưng không phải luôn luôn, có nghĩa là trò chơi là 100% giống hệt nhau.Nó thường có nghĩa là sự khác biệt có thể là nhỏ (chẳng hạn như thời gian tải lâu hơn), hoặc đơn giản là bản port có thể duy trì trải nghiệm của trò chơi gốc nhiều nhất.
"(Console) port" là một trò chơi ban đầu được thực hiện cho một console (giống như Wii hay Xbox 360) trước khi một phiên bản giống hệt nhau được tạo ra có thể được chơi trên một máy tính cá nhân hoặc bất kỳ nền tảng console khác. Thuật ngữ này đã được cộng đồng game thủ sử dụng rộng rãi. Quá trình chuyển một game từ console sang PC thường được coi là tiêu cực do mức hiệu suất cao hơn mà các máy tính thường bị tận dụng,một phần do phần cứng console được cố định trong suốt quá trình chạy (với các game đang được phát triển cho các console specs), trong khi máy tính trở nên mạnh mẽ hơn khi phần cứng phát triển, nhưng cũng do các trò chơi được chuyển đôi khi được tối ưu hóa kém cho máy tính cá nhân hay lazily port.Mặc dù có sự khác biệt lớn về mặt kiến ​​trúc, nhưng sự khác biệt về kiến ​​trúc có thể tồn tại như việc sử dụng bộ nhớ hợp nhất trên console.