1. Tableau Business Intelligence

Tại sao Microsoft lại hỗ trợ chạy Linux trên Windows

Discussion in 'Công nghệ' started by bsdinsight, Apr 14, 2016.

  1. bsdinsight

    bsdinsight Well-Known Member

    Điều bất ngờ nhất đối với lập trình viên tại hội nghị BUILD 2016 vừa qua là việc Microsoft công bố tính năng Windows Subsystem for Linux ( WSL) có trên bản cập nhật Anniversary cho Windows 10. Với tính năng này thì lập trình viên sẽ có thể chạy Ubuntu trực tiếp trên Windows mà không cần đến máy ảo, đồng thời Windows cũng sẽ hỗ trợ mặc định các lệnh Bash và CLI trong CMD. Vậy tại sao Microsoft lại thực hiện động thái này?

    WSL là một hệ thống 2 phần gồm lõi hệ điều hành phụ (subsystem) hiện đã có trên các bản build Insider Preview của Windows 10 và một gói phần mềm được Canonical - hãng mẹ của Ubuntu cung cấp. Phần lõi hệ thống sẽ cung cấp các hàm giao diện lập trình (API) của Linux trên Windows, tích hợp các tính năng như cho phép nạp các tập tin thực thi và thư viện của Linux nội trú trên Windows. Canonical sẽ bổ sung tập lệnh Bash và các công cụ thuộc giao diện dòng lệnh CLI trong môi trường Linux.

    Microsoft đang định vị WSL là một công cụ phát triển không hơn không kém với tầm nhìn là hỗ trợ các nhà phát triển Web và phần mềm nguồn mở. Rất nhiều lập trình viên hiện đã rất quen thuộc với bộ biên dịch ngôn ngữ lệnh Bash (Bourne Again Shell) để phát triển phần mềm với các lệnh make và gcc hay soạn thảo bằng vi hoặc emacs. WSL sẽ cung cấp cho lập trình viên các phiên bản của bộ công cụ này tương tự như trên Linux bởi Linux sẽ có thể chạy mà không cần điều chỉnh gì trên Windows.

    Mặc dù vậy, Microsoft không hỗ trợ WSL dưới dạng một nền tảng triển khai (deployment). Lập trình viên sẽ có thể chạy máy chủ Apache Web trên WSL nhưng các ứng dụng sẽ không thể chạy dưới dạng hoàn thiện với thiết lập này.

    bsd_vietnam1.png

    WSL được lấy ra từ dự án Project Astoria - một nổ lực của Microsoft nhằm cho phép các ứng dụng Android chạy trên Windows 10 Mobile. Ít ra theo dự án này, những hàm API mà Android cần đã được hỗ trợ mạnh mẽ nhưng đâu đó vẫn còn những yếu điểm. Điều này có nghĩa mặc dù có thể hỗ trợ chạy nhiều ứng dụng nhưng Windows sẽ không thể chạy "mọi" ứng dụng Linux. Các ứng dụng đòi hỏi khả năng truy xuất cấp thấp vào các phần cứng chẳng hạn như Wireshark sẽ không có khả năng chạy trực tiếp trên nền tảng WSL mà vẫn phải cần đến một bản port riêng cho Windows. WSL cũng không bao gồm X Windows hay các hệ thống đồ họa phụ khác, nó chỉ đơn thuần hỗ trợ các ứng dụng dòng lệnh.

    Việc Microsoft quyết định hỗ trợ phần mềm Linux trên Windows là một động thái rất đáng ngạc nhiên nhưng câu hỏi được đặt ra là tại sao? Câu trả lời lại khá đơn giản - lập trình viên thích những công cụ Linux, do đó việc hỗ trợ chúng là để khiến họ hài lòng. Tuy nhiên, câu chuyện không chỉ dừng lại ở đây. Hỗ trợ các ứng dụng Linux trong Windows là một bước tiến rất đáng chú ý bởi lẽ đối với một công ty đã bỏ ra nhiều thập kỷ để quảng bá nền tảng ứng dụng và bộ hàm API của riêng mình như Microsoft thì không nhiều khả năng Microsoft sẽ có thể thực hiện một động thái chỉ để cung cấp một số tính năng làm hài lòng lập trình viên.

    Câu chuyện này thực ra bắt nguồn từ 15 năm trước và Windows lúc đó vẫn là nền tảng chính của phần lớn lập trình viên phần mềm. Linux trên thực tế đã được xem là nền tảng quan trọng đối với các máy chủ nhưng trên máy tính cá nhân thì nó vấn chưa được quan tâm nhiều như ngày nay. Trong khi đó OS X lúc đó vẫn là nền tảng trẻ, chỉ có thể chạy trên những chiếc máy dùng kiến trúc PowerPC của IBM. Do đó, Windows trở thành nền tảng phát triển được chọn mặc định bởi lập trình viên không có lựa chọn thay thế nào tốt hơn.

    MySQL_vs_PostgreSQL.jpg

    Kết quả là nhiều phần mềm đã được phát triển cho Windows và hệ điều hành của Microsoft có thể hỗ trợ mạnh mẽ cho các ứng dụng server. Một ví dụ điển hình là cơ sở dữ liệu MySQL. Mặc dù ngày nay MySQL đã tốt hơn rất nhiều rồi nhưng cơ sở dữ liệu này vẫn được xem là lựa chọn tốt thứ 2 khi xét về các khía cạnh quan trọng như các tính năng kỹ thuật và tính toàn vẹn dữ liệu. Ở khía cạnh này thì PostgreSQL được xem là tối ưu hơn. Mặc dù vậy, MySQL vẫn giành được chiến thắng trên thị trường và được truyền bá nhiều hơn bởi nó cung cấp nền tảng phát triển tốt hơn. MySQL cài đặt dễ dàng, sở hữu phần mềm quản lý dữ liệu và ghi chép truy vấn cũng như có bộ hàm ODBC tốt hơn. Lập trình viên dùng PostgreSQL mặt khác không ưu tiên sử dụng những tính năng này và do không thể chạy cơ sở dữ liệu trên Windows nên họ cũng không được hưởng những tiện ích mà MySQL mang lại.

    Do đó, không có gì ngạc nhiên khi MySQL tăng trưởng vượt mặt PostgreSQL. Tuy nhiên, mọi chuyện không còn diễn ra theo chiều hướng cũ nữa. Chẳng hạn như đối với những lập trình viên Ruby thì việc thiết lập môi trường lập trình cho ngôn ngữ này trên Windows được xem là một cực hình. Thêm vào đó, trải nghiệm lập trình Ruby trên Windows cũng được đánh giá là tệ nhất. Các môi trường phổ biến hơn như Node.js vốn được phát minh trên OS X và Linux và đến nay vẫn chưa thể hoạt động hiệu quả trên Windows.

    Hiển nhiên từ cái nhìn của giới phát triển thì Windows vẫn còn đó nhưng không còn là nền tảng cơ bản, bắt buộc phải có như trước đây nữa. Tại sao vậy? Lý do là 2 nền tảng vốn không phải là đối thủ của Windows vào năm 2000 giờ đây đang trở nên tốt hơn đặc biệt là trong lĩnh vực lập trình. Linux vì nhiều lý do vẫn chưa thể trở thành nền tảng desktop dễ dùng nhất đối với người dùng cuối nhưng nhìn chung đã tốt hơn nhiều. Trong khi đó, OS X nhờ kết hợp giữa kiến trúc x86 của Intel và phần cứng chất lượng của Apple đã trở thành lựa chọn hàng đầu của nhiều lập trình viên.

    Thật vậy, Apple đã đi tiên phong khi mang lại cho người dùng một sự phối hợp cân đối giữa giá thành, sức mạnh, tính di động và một hệ điều hành sử dụng một phần lớn mã của hệ điều hành miễn phí giống Unix là FreeBSD. Dĩ nhiên vẫn có những điểm khác biệt giữa FreeBSD trên OS X và Linux chạy trên một máy chủ nhưng khác biệt này nhỏ hơn đáng kể so với FreeBSD trên OS X và Windows.

    MacBook_Coding.jpg

    Những gì Apple đã làm đó là cung cấp cho mọi kỹ sư, sinh viên phần mềm và khoa học máy tính một chiếc máy tính chạy Unix không quá "nặng" theo cả 2 nghĩa giá thành và trọng lượng. Trong khi đó, những chiếc máy tính PC thông thường thường không thể bì được về giá thành, chất lượng lẫn thiết kế. Kết quả là MacBook đã trở nên phổ biến hơn trong thời gian qua. Hiệu ứng tăng trưởng này còn được đẩy đi xa hơn nhờ danh tiếng của Apple tại thung lũng Silicon và kéo theo đó là sự phát triển của iOS với vai trò của một nền tảng ứng dụng. Những sinh viên ra trường đã nhanh chóng bị lôi kéo vào một nền văn hóa tôn vinh Apple và họ đa phần sử dụng những chiếc MacBook Pro đời mới. Windows không bị chê trách theo kiểu tại sao không cởi mở hơn theo giọng điệu bào chữa của những người tôn sùng chủ nghĩa nguồn mở, chỉ là hệ điều hành của Microsoft không phải là một phần trong cuộc sống của họ.

    Đây là một vấn đề mà có lẽ Microsoft đã nhận ra nhưng khá chậm trễ. Nhìn chung Microsoft đã đáp ứng khá tốt nhu cầu của cộng đồng lập trình viên mà hãng đang có nhưng cái cách mà Microsoft làm vẫn khá thiển cận. Mọi thứ bên ngoài hệ sinh thái Windows đều bị bỏ qua, điển hình như bộ biên soạn (compiler) Visual Studio C và C++ vẫn thiếu C99 - phiên bản cũ của ngôn ngữ lập trình C được tiêu chuẩn hóa từ cách đây 17 năm. Mặc dù cộng đồng lập trình viên vẫn không ngừng yêu cầu Microsoft hỗ trợ C99 trên Visual Studio nhưng đến nay vẫn bị từ chối. Lý do cơ bản được Microsoft đưa ra là các lập trình viên cho Windows không còn dùng mã C99 nữa nên không có lý do gì để hỗ trợ C99.

    Lập trình viên Windows không thể soạn mã C99 bởi bản thân Visual Studio C và C++ không thể biên soạn được nó. Trong khi đó, các nền tảng nguồn mở đã đón nhận C99 rồi cuối cùng giúp giới phát triển tạo ra những đoạn mã mà họ đơn giản không thể biên soạn trên Windows. Những lập trình viên sử dụng mã C99 hiển nhiên không thuộc hệ sinh thái phát triển Windows, do đó việc đáp ứng yêu cầu của họ không được Microsoft ưu tiên. Thế nhưng đến khi một lập trình viên Windows cần dùng mã C99 thì họ không có cách nào để soạn nó trên Windows. Microsoft vẫn bám víu lấy nền tảng C++ và tiếp tục cải tiến các thông số của C++ nhưng việc hỗ trợ C99 hoàn toàn vẫn chưa được thực hiện và chưa rõ khi nào sẽ được thực hiện.

    3660359_Bash.jpg

    Tương tự với tính tương thích của Unix nói chung và môi trường Unix shell nói riêng. Phần lớn lập trình viên trẻ vừa ra trường sẽ quen sử dụng bash và make cùng các công cụ liên quan. Visual Studio có thể rất tuyệt nhưng không phải lúc nào cũng tuyệt, điều này tùy thuộc vào cách thức nó vận hành. Microsoft dĩ nhiên không hoàn toàn làm ngơ trước vấn đề này, chỉ là hãng đã không đầu tư đúng mực trong khâu đào tạo và tuyển dụng bởi khi sinh viên lần đầu bước vào Microsoft thì họ sẽ ngay lập tức bị cuốn vào vòng xoáy lập trình cho Windows mà không có sự lựa chọn nào khác. Chỉ đến hội nghị BUILD 2016 vừa qua thì tình hình đã trở nên khả quan hơn và hướng giải quyết của Microsoft đã có hệ thống hơn.

    Đầu tiên là việc Microsoft đã đầu tư tiền bạc và thời gian vào Node.js để port môi trường runtime nền tảng chéo nguồn mở này sang Windows. Công ty đã tái kiến trúc phần mềm để đáp ứng điều này bởi Node.js phụ thuộc rất nhiều vào các hàm nhập/xuất không đồng bộ. Các thành phần nhập/xuất không đồng bộ được chia thành nhiều thư viện riêng, chẳng hạn như libUV và Node.js là một máy khách sử dụng các thư viện này. Microsoft chỉ đơn thuần là phát triển một bản port của Redis (máy chủ cấu trúc dữ liệu) để có thể chạy nội trú trên Windows.

    Khoảng trống về phần cứng và Apple tạo ra với dòng máy MacBook đã không còn quá lớn như trước nữa. Những thiết bị chạy Windows đời mới như HP Spectre x360 và Dell XPS 13 là những hệ thống được chế tạo cao cấp, chưa kể là hằng hà sa số các tùy chọn máy tính PC có chất lượng, giá cả phải chăng - thứ vẫn chưa có vào thời điểm cách đây 5 năm. Thêm vào đó, hình hài của laptop cũng thay đổi nhiều và người dùng có thêm nhiều lựa chọn như màn hình xoay, màn hình tháo rời, v.v… Tuy nhiên, chỉ phần cứng không thì chưa đủ và Windows vẫn chưa thể mang lại một trải nghiệm lập trình mà giờ đây có thể gọi là quá bình thường. Microsoft cần phải làm nhiều thứ để kêu gọi cộng đồng lập trình viên và thậm chí có thể thuyết phục họ sử dụng Windows trở lại.

    3660369_WSL.jpg

    Windows Subsystems for Linux giúp đáp ứng điều này bằng cách đưa một phần lớn trải nghiệm lập trình mà giới phát triển mong muốn lên Windows. Chẳng hạn như Redis giờ đây sẽ có thể chạy trên WSL mà không phải là một bản port đã qua chỉnh sửa mang nhiều khác biệt giữa Windows và Unix. Trải nghiệm lập trình Ruby sẽ tốt hơn và điều tương tự cũng sẽ xảy ra với các stack nguồn mở khác hỗ trợ một phần lớn hoạt động phát triển Web và đám mây ngày nay. Chúng sẽ hoạt động trên Windows tương tự như trên Linux. Microsoft ngay từ đầu đã bắt tay với Canonical, do đó tất cả những thứ này sẽ có thể được triển khai theo lệnh apt-get quen thuộc mà lập trình viên vẫn hay dùng trên Ubuntu.

    Khi WSL trở nên ổn định và hoàn thiện hơn, Microsoft khả năng sẽ chịu áp lực đưa một thứ vốn được hãng xem là một công cụ phát triển không hơn không kém thành một thứ được giới lập trình đòi hỏi có thể triên khai trên Windows Server. Đó là về lâu dài còn trước mắt, đối với hoạt động phát triển nhỏ lẻ, cá nhân thì WSL sẽ đáp ứng được. Việc cho phép chạy Redis ngay trên Windows mà không cần qua máy ảo là điều khiến lập trình viên hài lòng và rất đáng khích lệ cho nổ lực này của Microsoft.

    3660367_Microsoft_Xamarin.jpg

    Tuy nhiên, bên cạnh những tính năng hỗ trợ cho giới lập trình thì WSL còn đóng vai trò then chốt giúp Windows trở thành một nền tảng phát triển cực mạnh. Như đã biết, Microsoft đã vừa mua lại Xamarin và bộ thư viện lập trình này sẽ được Microsoft phát hành miễn phí cùng với Visual Studio và được phát hành dưới dạng nguồn mở để tạo động lực cho Windows trở thành một ứng cử viên sáng giá cho mọi hoạt động phát triển phần mềm. Visual Studio cũng tích hợp bộ giả lập Android chất lượng cao cùng với tất cả các công cụ lập trình dành cho Android.

    Riêng đối với ứng dụng iOS, lập trình viên vẫn cần dùng OS X để phát triển các ứng dụng cho nền tảng di động này bởi các bộ biên soạn với toolchain của Apple và bộ giả lập iOS chỉ có thể chạy trên OS X. Tuy nhiên, với Visual Studio và Xamarin, hoạt động phát triển ứng dụng cho iOS có thể được thực hiện hoàn toàn trên Windows và điều này sẽ mang lại một số lợi thế mà OS X không có. Chẳng hạn như Xamarin cung cấp khả năng điều khiển từ xa cho bộ giả lập iOS từ Windows và có thể hỗ trợ thao tác cảm ứng đa điểm. Trên một chiếc máy tính PC có màn hình cảm ứng, lập trình viên có thể sử dụng một hoặc nhiều ngón tay để tương tác với bộ giả lập iOS. Trong khi đó, Apple vẫn nói không với màn hình cảm ứng trên những chiếc máy Mac.

    3660368_Visual_Studio_2015.jpg

    Lập trình viên phát triển ứng dụng cho các hệ thống của Apple có thể vẫn yêu thích phần cứng của Apple nhưng họ sẽ bị lệ thuộc nhiều vào lộ trình sản phẩm. Người dùng Mac vẫn đang bị bỏ lại phía sau đối với lĩnh vực thực tế ảo bởi Apple vẫn chưa có ý định phát triển những chiếc máy dùng GPU cao cấp hơn, đủ mạnh để có thể chạy VR. Trong khi đó, hệ sinh thái Windows có thể đáp ứng nhu cầu phát triển ứng dụng VR.

    Tầm nhìn của Microsoft hiện tại có thể tập trung vào giới phát triển Web nhưng những gì mà hãng đang xây dựng không chỉ lôi cuốn lập trình viên Web mà tham vọng của Microsoft là biến Windows thành một nền tảng phát triển tuyệt vời dành cho mọi người.

    (Source)
     
  2. Loading...


: Linux, Mobile, Xamarin

Share This Page