Vì sao Microsoft đưa Linux lên Windows

15 năm sau khi CEO Steve Ballmer lớn tiếng coi Linux là "ung nhọt", ban lãnh đạo mới của Microsoft công bố tính năng hỗ trợ các phần mềm Linux thông qua một hệ thống tích hợp giao diện dòng lệnh có tên Windows Subsystem for Linux (WSL).

Không phải Microsoft muốn hỗ trợ Linux, chỉ là hãng bị buộc tiến thêm một bước hướng đến Linux mà thôi. Microsoft sẽ đối diện với những vấn đề lớn hơn trong quá trình "Linux hóa". Trước đây, việc làm này là điều không tưởng vì Microsoft không ngờ rằng sẽ có ngày điện toán đám mây phải dựa vào Linux.

Thời gian gần đây, Microsoft thường chậm chân hơn so với nhiều doanh nghiệp khác, mà mới nhất là công nghệ ảo hóa. Microsoft không thực sự là nhà phát minh, song khi bước vào lĩnh vực nào đó, dù là đến sau, Microsoft vẫn tạo ra áp lực không nhỏ lên những đối thủ bằng cách liên tục đưa ra sản phẩm, dịch vụ.

Tuy vậy so với Linux, Windows chậm về công nghệ và nhiều chuyên gia dự báo rằng sẽ không có cuộc "đổ bộ" lớn nào trong cộng đồng các nhà phát triển để chuyển từ Ubuntu sang Windows 10. Họ vẫn gắn bó với chiếc máy Mac và các Mint box của mình.

Việc công bố Windows Subsystem for Linux tuy vậy cần làm rõ ở vài điểm. Đây không phải là Linux chạy trong một máy ảo, không có kernel Linux nào hiện hữu, cũng không có phần cứng giả lập Linux trong Windows. Nó cũng không giống như Cygwin, là môi trường Unix được biên dịch đặc biệt để chạy trên nền tảng Windows. Nó cũng không phải là bộ chứa container. Môi trường Ubuntu trong Windows 10 chứa các mã nhị phân hệt như mã nhị phân trên nền tảng Ubuntu, đó là một nền thực thi ELF.

Điều mà Microsoft làm là tạo một hệ thống gọi là lớp chuyển dịch. Khi một đoạn nhị phân Linux được gọi thì WSL sẽ dịch mã này thành mã của Windows và chạy nó. Quy trình này có vẻ giống như WINE, là cách tương tự mà Linux làm với chương trình Windows. Nhưng đây mới chỉ là bước khởi đầu cho một hành trình dài của Microsoft hướng đến Linux.

Dự kiến sẽ phát hành trong bản cập nhật lớn Anniversary Update for Windows 10 vào mùa hè 2016, WSL bao gồm hệ thống thực thi Linux chính (core subsystem) và một gói công cụ do Canonical cung cấp. Hệ thống thực thi sẽ mang các API Linux lên Windows, cho phép chạy các file thực thi và các thư viện Linux trên Windows. Canonical, nhà phát triển bộ distro Linux nổi tiếng Ubuntu, sẽ cung cấp phần mềm bash shell và các công cụ dòng lệnh khác thường có trên Linux.

Microsoft coi WSL là một công cụ dành riêng cho giới lập trình viên với mục đích hỗ trợ các nhà phát triển web tốt hơn trước đây. Rất nhiều nhà phát triển web phụ thuộc vào các gói phần mềm mã nguồn mở và họ sử dụng thành thục phần mềm dòng lệnh bash, vốn được dùng để build (tạo file thực thi) thông qua các công cụ tích hợp trong bash như make, gcc hoặc chỉnh sửa file mã nguồn qua trình biên tập vi và emacs. WSL sẽ mang tới trải nghiệm sử dụng các công cụ này gần giống hệt như trên Linux.

Tuy hỗ trợ các nhà phát triển, Microsoft không hề coi WSL là một nền tảng để triển khai (deploy) phần mềm. Điều này có nghĩa rằng bạn có thể cài đặt và sử dụng Apache Server lên WSL thay vì một phiên bản Linux đầy đủ, nhưng mục tiêu cuối cùng không phải là dùng Apache trên WSL để đưa vào sử dụng trong thực tế (production).

WSL có lẽ đã được Microsoft "tái chế" từ Project Astoria, dự án phát triển công cụ để chuyển đổi ứng dụng Android thành ứng dụng Windows 10 Mobile. Do đó, rất có thể trong giai đoạn đầu, WSL sẽ hỗ trợ các API của Android tốt nhất. Nói cách khác, trong khi WSL sẽ hỗ trợ phần lớn các ứng dụng Linux, Windows sẽ không thể chạy tất cả các ứng dụng Linux. WSL không hề bao gồm bộ kernel Linux, do đó các hệ thống file như ZFS hay btrfs có lẽ sẽ không được hỗ trợ trên Windows. Các ứng dụng đòi hỏi quyền truy cập sâu vào các thiết bị phần cứng, ví dụ như Wireshark, có lẽ sẽ không thể chạy trên WSL. Cuối cùng, WSL cũng không hề hỗ trợ X-Window của Unix và các hệ thống giao diện đồ họa khác mà đây sẽ chỉ là một công cụ hỗ trợ cho các ứng dụng với giao diện dòng lệnh.

Vì sao phải làm vừa lòng các nhà phát triển?

Quyết định hỗ trợ phần mềm Linux, dù ở bất cứ mức độ nào, cũng là hết sức bất ngờ. Vì sao Microsoft đưa ra quyết định này? Nhìn qua, câu trả lời là rất dễ dàng: lập trình viên thích sử dụng các công cụ Linux, do đó hỗ trợ Linux sẽ giúp làm hài lòng các nhà phát triển. Nhưng nhìn sâu hơn sẽ thấy câu trả lời không đơn giản như vậy: Microsoft đã dành hàng thập kỷ để quảng bá cho các API và các nền tảng ứng dụng của mình. Việc hỗ trợ Linux trên nền tảng Windows rõ ràng không dừng ở mức "xoa dịu" các nhà phát triển.

Lùi lại 15 năm trước, bạn sẽ thấy Windows là nền tảng làm việc được số đông ưa thích nhất. Unix và Linux đã thống trị thị trường máy chủ từ lâu, nhưng giao diện đồ họa của Linux ngày đó còn kém. Mac OS X thì thân thiện hơn Windows nhưng vẫn đang chạy trên những cỗ máy đắt tiền có sử dụng bộ vi xử lý PowerPC. Điều này giúp cho Windows trở thành nền tảng gần như thống trị các nhà phát triển phần mềm, đơn giản là họ chẳng có thị trường nào lớn hơn.

Chính vị trí này của Windows với cộng đồng lập trình viên đã giúp thay đổi một phần khung cảnh cạnh tranh trên máy chủ: phần mềm nào hỗ trợ tốt từ phía Windows cũng sẽ gia tăng mức độ phổ biến trên máy chủ.

Ví dụ điển hình nhất là hệ quản lý cơ sở dữ liệu MySQL, ngày nay nó đã có chất lượng tốt hơn rất nhiều, tuy xét về khía cạnh khả năng kỹ thuật và bảo vệ dữ liệu thì chưa bắt kịp PostgreSQL. Ấy vậy nhưng MySQL vẫn thu hút được thị phần đáng kể nhờ cung cấp một nền tảng phát triển tốt tới các lập trình viên qua Windows. MySQL có thể được cài đặt lên Windows một cách dễ dàng qua installer, có ứng dụng viết câu lệnh và quản lý database chất lượng tốt và cũng có driver ODBC (chuẩn API giữa các ứng dụng với hệ thống quản lý cơ sở dữ liệu). Ngược lại, PostgreSQL không hề đặt trọng tâm vào các tính năng này, và trong khi các lập trình viên không phải là không thể chạy hệ cơ sở dữ liệu này trên Windows, cố gắng làm như vậy sẽ khiến họ khó chịu hơn rất nhiều so với Windows. Không mấy bất ngờ, MySQL đã trở nên vô cùng phổ biến còn PostgreSQL thì không.

Vị vua bị lật ngôi

Nhưng đáng tiếc là mọi thứ không còn êm đẹp với Microsoft như trước đây. Ví dụ, dù cho quá trình tạo môi trường phát triển (development environment) cho Ruby gần như là bất tiện trên bất cứ nền tảng nào, trải nghiệm Ruby trên Windows đang có chất lượng tệ nhất. node.js được xây dựng trên Mac OS X và Linux và trong suốt một thời gian dài không thể chạy trên Windows. Hoặc, Salvatore Sanfilippo nhà phát triển của Redis, một trong những hệ quản lý dữ liệu NoSQL phổ biến nhất, đã từ chối các bản vá có thể giúp phần mềm này chạy trên Windows. Lý do không phải là bởi tác giả của Redis có ác cảm với Microsoft mà là bởi, theo lời khẳng định của Sanfilippo trên blog cá nhân, anh này chẳng có lý do gì để làm vậy cả. Sanfilippo vẫn ủng hộ ý tưởng chỉnh sửa các phần mềm để hỗ trợ Windows nhưng sẽ không chấp nhận để ý tưởng này làm chậm trễ quá trình phát triển của sản phẩm chính.

Windows rõ ràng là chưa bị chìm vào quên lãng, nhưng nền tảng của Microsoft cũng không còn là lựa chọn duy nhất, buộc-phải-có của các nhà phát triển nữa. Lý do là bởi cả 2 đối thủ kém cỏi của thập niên 2000 giờ đây đều đã được nâng tầm đáng kể. Linux vẫn chưa phải là một hệ điều hành trên nền desktop đủ năng lực cạnh tranh với các đối thủ trả phí nhưng cũng đã trở nên dễ chịu hơn rất nhiều nhờ công sức của các nhà phát triển đứng sau Ubuntu và CentOS. Còn Mac OS X, nhờ có bước chuyển sang kiến trúc x86 cùng lợi thế truyền thống về thiết kế phần mềm của Apple, đã trở thành lựa chọn tuyệt vời của rất nhiều lập trình viên.

Thực tế là trong một khoảng thời gian dài, bạn hoàn toàn có thể nói rằng chỉ duy nhất Apple là tạo ra những chiếc laptop x86 có giá chấp nhận được và mang tới một trải nghiệm sử dụng đủ dễ chịu cho các nhà phát triển. Đặc biệt nhất trong số này là MacBook Air, sản phẩm đã tạo ra một tiêu chuẩn mới về kích cỡ và trọng lượng cho laptop. Trong khi các thế hệ MacBook Air đầu tiên luôn có giá đắt đỏ, các thế hệ sau đã chạm tới mức giá dễ chấp nhận với cộng đồng người dùng chuyên nghiệp.

Các nhà sản xuất PC chạy Windows mất tới nhiều năm mới theo kịp Apple, và khi họ có thể tạo ra các mẫu laptop thực sự mạnh mẽ và gọn nhẹ, họ lại đặt cho chúng mức giá thậm chí còn cao hơn cả Apple. Apple đã thực sự đi đầu trong công cuộc chế tạo ra một chiếc laptop kết hợp tốt giữa giá cả, sức mạnh xử lý và mức độ tiện dụng. Một điểm vượt trội nữa của laptop Apple là hệ điều hành đã tái sử dụng phần nhiều mã nguồn của FreeBSD – "ông tổ" của cả Mac OS X và Linux. Dĩ nhiên giữa 2 hệ điều hành này vẫn có nhiều khác biệt, nhưng không nhiều bằng giữa Linux và Windows.

Với MacBook Air, Apple đã đem lại cho các sinh viên khoa học máy tính và kỹ nghệ phần mềm một chiếc laptop Unix chuyên nghiệp có mức giá dễ chấp nhận, và không mấy ngạc nhiên, MacBook Air nhanh chóng trở nên phổ biến tại thung lũng Silicon và San Francisco. Những cô cậu tuổi teen rời ghế giảng đường đại học (bất kể là do bỏ học hay vừa tốt nghiệp) tại đây không mang niềm mơ ước được đặt chân vào các doanh nghiệp cũ - nơi Windows cho đến nay vẫn làm chủ. Thay vào đó, họ ao ước tự thành lập hoặc xin việc vào những startup "cuồng" Apple và sẵn sàng trang bị cho họ những chiếc MacBook hay iMac mới nhất.

Lúc này, Windows rơi vào tình cảnh tồi tệ hơn cả khi còn là đối tượng công kích của những kỹ sư phần mềm ủng hộ mã nguồn mở. Hệ điều hành của Microsoft không còn vai trò gì trong cuộc sống của những coder trẻ tuổi tại San Francisco nữa.

Một gã khổng lồ chậm chạp

Trong lúc cộng đồng các lập trình viên ngày một chuyển sang ủng hộ Apple thì Microsoft lại tỏ ra hoàn toàn chậm chân khi đối đầu với những mối đe dọa mới. Nhìn chung, gã khổng lồ phần mềm hỗ trợ khá tốt cộng đồng lập trình viên sử dụng công nghệ của hãng, nhưng tất cả các nhà phát triển đứng ngoài cộng đồng này lại bị đối xử khá tệ.

Ví dụ, bộ compiler C và C++ trên Visual Studio không hỗ trợ C99, một chuẩn của C đã được ra mắt từ 17 năm về trước. Cộng đồng lập trình C nói chung đã liên tục yêu cầu Microsoft hỗ trợ C99 và gã khổng lồ này luôn luôn từ chối. Không nói ra nhưng ai cũng hiểu rằng, lý do cho sự "cứng đầu" này là bởi các nhà phát triển ứng dụng Windows không sử dụng C99.

Không hiểu vì lý do gì Microsoft không hề muốn đáp ứng nguyện vọng của các coder sử dụng Windows muốn được code C99. Sự thật rằng ứng dụng mã nguồn mở được viết bằng C99 không thể được biên dịch trên Windows cũng không khiến cho gã khổng lồ phần mềm phải nghĩ lại. Đơn giản, những người viết ra các đoạn code này không nằm trong nhóm người dùng Windows, và do đó đáp ứng nguyện vọng của họ không phải là ưu tiên của Microsoft.

Nhưng trải qua nhiều năm, có lẽ một vài nhà lãnh đạo của Microsoft đã nhận ra rằng họ đang không bắt kịp với thời thế. Công ty hiện đã đặt mục tiêu hỗ trợ các đặc tả mới nhất của C++ lên mức ưu tiên cao, nhưng C99 có lẽ sẽ mãi mãi không bao giờ trở thành một phần của Visual Studio.

Vấn đề này không chỉ diễn ra với C99 mà còn diễn ra với cả môi trường dòng lệnh shell Unix nói chung. Nhưng, một coder trẻ tuổi tốt nghiệp một trường đại học hạng "top" gần như chắc chắn sẽ sử dụng thành thục bash, make và các công cụ Linux khác. Visual Studio là một công cụ phát triển tuyệt vời, nhưng công cụ đó hoàn toàn nằm ngoài trải nghiệm làm việc với Linux thông thường.

Microsoft không phải là không biết tới vấn đề của mình. Theo một số nguồn tin nội bộ, Microsoft đã mất rất nhiều tiền để thực hiện đào tạo cho nhân viên mới, bởi trước khi gia nhập Microsoft thì các nhân viên này cũng chưa từng một lần làm quen với cung cách phát triển phần mềm trên Windows. Cho đến tận trước thời điểm Build 2016, gã khổng lồ vẫn không hề có ý định giải quyết vấn đề này một cách triệt để.

Thay vào đó, chúng ta chỉ được đón nhận một vài nỗ lực nhỏ lẻ. Dĩ nhiên là các nỗ lực đó không phải là vô nghĩa: Microsoft đã đầu tư tiền bạc và nhân lực tham gia quá trình di trú node.js lên Windows. Người được hưởng lợi lớn nhất ở đây lại chính là cộng đồng node.js: trong quá trình port node.js lên nền tảng của mình, Microsoft đã đóng góp phương thức xử lý I/O async (đầu ra/đầu vào không đồng bộ) thực sự tuyệt vời của Windows cho node.js. Phần xử lý I/O async của Windows đã được xé nhỏ ra làm một thư viện độc lập có tên libuv, và node.js có sử dụng tới thư viện này. Tương tự, Microsoft cũng đã phát triển một bản di trú cho Redis để chạy trực tiếp trên Windows.

Những nỗ lực này là vô giá với cộng đồng nhà phát triển nhưng lại không giúp giải quyết triệt để vấn đề rằng các lập trình viên của ngày nay vẫn chưa thực sự tin tưởng vào Microsoft. Trong khi Ryan Dahl, người đã sáng lập ra node.js, ghi nhận rằng khả năng hỗ trợ Windows là rất quan trọng và rất sẵn lòng tự thay đổi phần mềm của mình để hỗ trợ Windows, không phải bất kỳ một tên tuổi lớn nào của làng phần mềm cũng sẵn sàng làm vậy.

Apple mất lợi thế về phần cứng

Cùng lúc, lợi thế về mặt phần cứng của Apple đã bị san phẳng. Các thiết bị như HP Spectre x360 và Dell XPS 13 được cộng đồng coder yêu quý. Càng ngày, các nhà phát triển càng có nhiều lựa chọn phần cứng Windows vừa có chất lượng cao, vừa có giá dễ chịu. Họ máy Windows hiện cũng đang đa dạng hơn bao giờ hết: bạn có thể mua laptop truyền thống, laptop lai tablet như Surface Pro hoặc những thiết bị độc đáo như chiếc Surface Book có card màn hình "rời" theo đúng nghĩa. Đây đều là các lựa chọn tuyệt vời.

Nhưng chỉ phần cứng là không đủ. Windows vẫn cần phải tạo ra một trải nghiệm phát triển phần mềm thực sự hấp dẫn. Rõ ràng là Microsoft cần phải làm được điều gì đó để thu hút cộng đồng coder.

WSL chính là giải pháp để Microsoft có thể biến hệ điều hành của mình thành "ngôi nhà" của lập trình viên, như những gì công ty của CEO Satya Nadella đã tuyên bố tại Build 2016. Các công nghệ vốn không hỗ trợ Windows nay sẽ chạy trên WSL. Redis nằm trong số này: đây không phải là một phiên bản Redis đã được fork (chỉnh sửa) mà là một phiên bản Redis "thực thụ", không khác gì phiên bản trên Linux. Tương tự, trải nghiệm Ruby trên Windows cũng sẽ được cải thiện đáng kể khi chạy trên WSL.

Bạn có thể chờ đợi một cuộc "di cư" ồ ạt cho gần như tất cả các công cụ, mã nguồn mở đang đóng vai trò xương sống cho phần lớn các trang web và đám mây hiện nay. Các phần mềm này sẽ tìm thấy "ngôi nhà" mới trên Windows, một ngôi nhà giống hệt như Linux trước đây. Microsoft hiện đang hợp tác cùng Canonical, do đó chẳng sớm thì muộn các lập trình viên cũng có thể tải các phần mềm này về Windows bằng một câu lệnh apt-get đơn giản như trên Ubuntu. Và, sẽ là không có gì bất ngờ nếu như các phiên bản Linux khác cũng mang một phần trải nghiệm của mình lên WSL.

Khi WSL ngày một trưởng thành và phổ biến, rất có thể cộng đồng coder sẽ gây sức ép để buộc Microsoft phải đẩy mạnh vai trò của phần mềm này ra khỏi giới hạn của một công cụ phát triển. Chắc chắn sẽ có lúc Microsoft phải cung cấp khả năng triển khai phần mềm lên WSL trên Windows Server cho các nhà phát triển. Với các nhà phát triển nhỏ, khả năng chạy các phần mềm như Redis trên Windows mà không cần có máy ảo là đặc biệt quan trọng.

Microsoft trở lại

Nhưng kể cả ở mức độ hạn chế như hiện nay, WSL vẫn góp phần giúp cho Windows trở thành một nền tảng đặc biệt quan trọng với các nhà phát triển. Thương vụ mua lại Xamarin cùng với tuyên bố tặng miễn phí Xamarin cùng với Visual Studio và mở công cụ này thành mã nguồn mở cho phép Windows trở thành lựa chọn lý tưởng nhất để sử dụng làm môi trường phát triển rộng khắp hết mức có thể. Ngay từ bây giờ, Visual Studio đã có sẵn một bộ giả lập Android chất lượng cao cũng như toàn bộ các công cụ cần thiết để phát triển ứng dụng cho hệ điều hành của Google.

Các ứng dụng iOS vẫn chỉ có thể được build trên Mac OS X, do chỉ duy nhất công cụ của Apple có thể biên dịch mã nguồn cho iOS và máy ảo iOS chỉ chạy trên OS X. Tuy vậy, ít nhất với Visual Studio và Xamarin, các nhà phát triển có thể tập trung khâu phát triển ứng dụng iOS trên Windows và thử nghiệm ứng dụng này bằng cách kết nối tới máy Mac trong cùng mạng nội bộ. Ngay cả điều này cũng mang tới lợi thế cho các coder sử dụng Windows, bởi máy ảo iOS trên Windows không hỗ trợ cảm ứng đa điểm (do Mac chỉ hỗ trợ chuột, không hỗ trợ bàn phím). Ngược lại, rất nhiều các mẫu tablet lai và laptop chạy Windows hiện nay đã có cảm ứng đa điểm.

Quan trọng hơn, Windows có vẻ đã vượt qua Mac trên các cuộc chiến công nghệ mới. Ví dụ, người dùng Mac đang bị bỏ rơi khỏi cuộc cách mạng thực tại ảo, bởi đơn giản là Apple vẫn chưa chịu phát triển các mẫu máy tính có GPU rời mạnh mẽ. Trên lĩnh vực máy để bàn, Apple chỉ có duy nhất 2 lựa chọn là chiếc iMac không thể hỗ trợ GPU mạnh (vì là máy All-in-One) và chiếc Mac Pro quá đắt. Ở mức giá của Mac Pro, bạn thậm chí có thể mua được nhiều cỗ máy Windows để phát triển ứng dụng VR/AR cho HoloLens, Xbox, iOS và Android.

Với Build 2016, Microsoft mới chỉ hướng tầm nhìn lên các nhà phát triển web. Microsoft đang hy vọng Windows của mình ngày hôm nay và trong tương lai sẽ là nền tảng cho tất cả các lập trình viên.

Tổng hợp từ các nguồn: Infoworld, PC World