Bitcode là gì?
Trước khi tìm hiểu về bitcode, bạn cần biết qua một chút về Low Level Virtual Machine (LLVM). Đây là một thư viện lập trình dùng để biên dịch (compile) các mã nguồn cấp cao thành mã máy để thiết bị có thể hiểu về thực thi được. LLVM đã được sử dụng để xây dựng nên nhiều bộ chuyển đổi (compiler) của nhiều ngôn ngữ lập trình cấp cao phổ biến hiện nay, ví dụ như C, C++, Python, Java, Ruby, tất nhiên có cả Objective-C và Swift (vốn là hai ngôn ngữ được xài để viết app cho OS X và iOS)
Trong LLVM có 3 phần. Một phần gọi là "front-end", tạm dịch là phần "mặt tiền", nó chính là thứ dùng để đọc các ngôn ngữ lập trình nói trên. Phần thứ hai gọi là "back-end", nó biết cách đưa ra các dòng mã máy có thể được chạy bởi CPU ARM, x86_64, SPARC, PowerPC và rất nhiều kiến trúc khác.
Nhưng làm sao back-end có thể hiểu được mã nguồn của front-end để thực hiện chức năng chuyển đổi này? Đó là nhiệm vụ của một lớp trung gian nằm giữa "back-end" và "front-end". Lớp trung gian này được biết đến với cái tên "LLVM Optimizer", nó sử dụng một ngôn ngữ lập trình cấp thấp gọi là intermediate representation (IR). IR trong LLVM có thể tồn tại ở ba dạng khác nhau tùy vào lập trình viên, và một trong ba dạng đó có "bitcode" (hai dạng còn lại là assembly và đối tượng kiểu C++).
Nhờ thiết kế độc lập của 3 thành phần, người ta rất dễ hỗ trợ thêm ngôn ngữ front-end mới, cũng như hỗ trợ cho các kiến trúc CPU mới ở phía back-end, ngay cả những kiến trúc không tồn tại ở thời điểm ứng dụng ra đời.
Cũng chính nhờ lợi điểm này mà Apple mới nói rằng Bitcode giúp "ứng dụng tự động tận dụng các khả năng mới của CPU do Apple bổ sung trong tương lai mà lập trình viên không cần sửa lại app". Vì sao? Bởi phần front-end và bitcode vẫn giữ nguyên, chỉ có phần back-end là thay đổi mà thôi, mà phần biên dịch back-end này lại giờ đây sẽ do App Store đảm nhiệm, tức là thuộc trách nhiệm của Apple chứ không còn của lập trình viên nữa.
Hiện tại công ty đang dùng kiến trúc ARM cho iOS và watchOS, còn OS X thì dựa trên x86_64. Với bitcode, sau này nếu Apple đổi sang dùng một kiến trúc XYZ mới nào đó thì các app có chứa bitcode vẫn có thể hoạt động được bình thường trên nền tảng mới này mà lập trình viên không cần phải thay đổi gì mã nguồn cả, tất cả đã được App Store đảm đương.
Tương tự, ở quy mô hẹp hơn, giả sử Apple vẫn tiếp tục dùng ARM cho iOS và watchOS nhưng các CPU mới của hãng có thêm một số chức năng đặc biệt nào đó thì nhờ có bitcode, các ứng dụng vẫn tận dụng được các chức năng này mà không yêu cầu lập trình viên phải viết lại app.
Lấy một ví dụ đơn giản thế này. Với chiếc iPad Pro sắp ra mắt, giả sử Apple không còn xài chip ARM nữa mà chuyển sang chip Intel thì những app iOS nào có tích hợp bitcode sẽ vẫn chạy được trên nền tảng mới mà lập trình viên chẳng cần phải sửa chữa gì. Tương tự, con chip S1 trong Apple Watch hiện là ARM, nhưng lỡ như Apple muốn xài kiến trúc Intel cho chip S2 thì cũng chấp luôn, ứng dụng sẽ luôn chạy được, Apple không cần phải chờ lập trình viên đăng tải lại các app của họ.
Ảnh hưởng đến sự thay đổi kiến trúc CPU
Quảng cáo
Lịch sử của Apple cho thấy rằng hãng không ngại thay đổi kiến trúc CPU dùng trong các sản phẩm của mình. Lần thứ nhất là khi Apple chuyển từ việc sử dụng kiến trúc Motorola 68k sang PowerPC trong những năm 1990, lần thứ hai vào năm 2005 khi hãng quyết định từ bỏ PowerPC và chuyển sang dùng x86 (CPU Intel). Ngoài Apple thì có hai đối thủ cạnh tranh khác là Commodore và Atari cũng từng thay đổi kiến trúc vi xử lý cho các máy tính của họ, tuy nhiên khác với Apple, hai công ty này đã không bao giờ lấy lại được thị phần của mình và sau này ngừng hẳn việc sản xuất PC.
Nói riêng về mảng di động, Apple cũng đã mạnh dạn chuyển đổi từ kiến trúc CPU ARM 32-bit lên thành 64-bit trong lúc thị trường smartphone, tablet vẫn còn đang chìm đắm trong hàng tá các vi xử lý 32-bit vào năm 2013 với chiếc iPhone 5s.
Ở đợt chuyển sang xài x86, Apple thông báo trước cho giới lập trình viên về việc này tận 2 năm để họ có thời gian chỉnh sửa lại app của mình. Tương tự, với đợt nâng cấp lên CPU 64-bit cho di động, Apple cũng yêu cầu lập trình viên phải thay đổi mã nguồn và "nộp" ứng dụng lại lên App Store.
Nhưng trong thời gian tới, với bitcode, các nhà phát triển sẽ không còn phải lo lắng về những đợt chuyển đổi kiến trúc CPU, dù cho sự thay đổi đó có lớn đến mức nào đi chăng nữa. Ngay cả khi Apple chuyển sang dùng một kiến trúc hoàn toàn mới thì app của họ vẫn đảm bảo là sẽ chạy được. Và lúc đó, việc duy nhất Apple cần suy nghĩ đó là làm thế nào để CPU của họ chạy tốt hơn, mạnh hơn, ít hao pin hơn, không còn phải lo lắng về vấn đề tương thích app nữa.
Phản ứng của lập trình viên ra sao?
Quảng cáo
Caleb Davenport, một kĩ sư chuyên về iOS, nói rằng ông vừa thích vừa lo lắng với việc Apple bắt đầu sử dụng bitcode. Thích bởi vì ông không phải viết lại app của mình khi Apple đổi kiến trúc CPU, nhưng "thứ làm tôi lo lắng đó là ứng dụng của tôi có thể được dịch ra để chạy với những cấu hình mà có thể tôi đã không kiểm tra, từ đó dẫn đến lỗi mà bản thân tôi không thể tự tái hiện để sửa".
Ông nói rằng khi chiếc iPhone 5s ra đời lần đầu tiên năm 2013, ông đã phải đợi chiếc điện thoại này về đến tay mình thì mới dám kích hoạt những thành phần 64-bit trong app của ông. Còn với việc LLVM tự động biên dịch các app, người dùng cuối có thể sẽ trải nghiệm app trước cả lập trình viên và có thể gặp những vấn đề không thể dự báo trước. Đặc biệt, những app nào có sử dụng thêm các thư viện lập trình bên ngoài thì chắc chắn sẽ tiêu tùng nếu như thư viện đó không được cập nhật với bitcode.
Một lập trình viên khác, Sjoerd Janssen, thì lại rất hứng thú bởi anh có thể giảm đi rất nhiều việc khi Apple ra mắt một chiếc điện thoại mới. Trong khi đó, trang iMore thì nói rằng họ rất thích bitcode nhưng cũng tỏ ra quan ngại với lý do giống như Davenport đã nói. Nhiều lập trình viên được trang The Next Web hỏi thăm cũng chia sẻ rằng họ lo đến chuyện Apple có thể sẽ không làm tốt và khiến app của họ bị lỗi.
Tương lai: ứng dụng độc lập với CPU, kiến trúc vi xử lý mới cho Mac
Một bài viết trên trang Medium tin rằng việc Apple bắt đầu áp dụng bitcode chính là tín hiệu cho một thứ lớn hơn, quan trọng hơn. Trong tài liệu của mình, Apple có ghi như sau: "với ứng dụng iOS, việc sử dụng bitcode là không bắt buộc nhưng là mặc định. Nếu bạn đưa bitcode vào app của mình, tất cả mọi bộ khung mà app sử dụng cũng cần phải có bitcode. Còn với ứng dụng cho Apple Watch, bitcode là bắt buộc phải có".
Như vậy chúng ta có thể thấy rằng Apple đang dần dần "ép" lập trình viên phải dùng bitcode, bắt đầu với các app cho chiếc đồng hồ của mình. Trên iOS, từ "mặc định" có thể chuyển thành "bắt buộc" trong tương lai bất kì lúc nào.
Nhưng ảnh hưởng lớn nhất có lẽ là với các ứng dụng Mac. Hiện tại Apple có Bob Mansfield, người từng giữ chức phó chủ tịch cấp cao chịu trách nhiệm về mảng công nghệ nhưng đã chuyển sang làm cho một số "dự án bí mật". Biết đâu thứ mà Mansfield đang làm chính là một dòng CPU ARM mới dành cho các máy tính mang logo quả táo thì sao. Chúng ta cũng đã nghe rất nhiều tin đồn về chuyện Apple đang muốn tìm giải pháp thay thế cho chip Intel x86 rồi, và với sự xuất hiện của bitcode thì tin đồn đó càng được củng cố hơn nữa.
Theo những gì chúng ta đã biết thì bitcode hiện chưa hỗ trợ app OS X, nhưng chỉ là ở thời điểm hiện tại mà thôi. Trong tương lai, dù sớm hay muộn thì Apple cũng sẽ kích hoạt tính năng này. Một bằng chứng khá rõ ràng đó là người giới thiệu bitcode trên sân khấu WWDC 2015, Andreas Wendker, chính là phó giám đốc mảng trải nghiệm của OS X. Trong dài hạn, mọi app đều không còn phụ thuộc vào kiến trúc CPU nữa.
Với vũ khí bitcode và con chip ARM riêng trong tay, Apple có thể thoát khỏi sự phục thuộc vào Intel, không còn phải lo về những đợt hoãn giao chip của công ty này nữa. Họ cũng hoàn toàn tự chủ về mặt hiệu năng và mức độ tiêu thụ điện của CPU, từ đó tối ưu tốt hơn cho các phần cứng của mình. Ngoài ra, Apple cũng không cần thông báo trước cho lập trình viên khi họ muốn đổi kiến trúc vi xử lý, từ đó giúp giữ bí mật tốt hơn về kế hoạch kinh doanh của mình.
Kết
Tóm lại, với bitcode, cả Apple và lập trình viên đều được lợi. Apple trở nên linh hoạt hơn trong việc thay đổi kiến trúc CPU cho các sản phẩm máy tính lẫn di động, còn lập trình viên thì không phải bỏ công sức, tiền bạc và thời gian để viết lại app trong những dịp như thế. Tất nhiên, bitcode sẽ cần thời gian để phổ biến và được tích hợp vào bên trong nhiều app, khi đó thì những lợi ích nói trên mới phát huy tác dụng, chứ chỉ có vài chục app dùng bitcode thì mọi chuyện cũng không thay đổi mấy.