12/08/2018, 13:57

Bitcode - Vũ khí của Apple

Bitcode một khái niệm không mới, nhưng chắc còn nhiều bạn mơ hồ về khái niệm này. Vậy nó là cái gì? tại sao khi build app (iOS) lại hỏi là có bật bitcode hay không? Bitcode - Về cơ bản thì đây là một thứ cho phép App Store tối ưu hóa ứng dụng cho từng loại thiết bị trước khi chúng được người dùng ...

Bitcode một khái niệm không mới, nhưng chắc còn nhiều bạn mơ hồ về khái niệm này. Vậy nó là cái gì? tại sao khi build app (iOS) lại hỏi là có bật bitcode hay không?

Bitcode - Về cơ bản thì đây là một thứ cho phép App Store tối ưu hóa ứng dụng cho từng loại thiết bị trước khi chúng được người dùng tải về. Ngoài ra, nó còn giúp các ứ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 trong khi lập trình viên không cần đăng tải lại app lên cửa hàng.

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" 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++).

1.png

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.

2.png

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, 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ư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.

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.

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.

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.

0