Tìm hiểu về VSCode
Lịch sử hình thành phát triển của công cụ lập trình phần mềm phổ biến nhất hiện nay - Visual Studio Code và chiến lược triển khai văn hoá open-source của Microsoft.
Mình bắt đầu sử dụng Visual Studio Code (VSCode) năm 2017, khi lần đầu lập trình ngôn ngữ Golang. Một năm sau đó, năm 2018, theo khảo sát Developer Insight của StackOverflow, VSCode lần đầu vượt Visual Studio để dẫn đầu ở hạng mục công cụ phát triển phần mềm (IDE) phổ biến nhất. VSCode tiếp tục vị thế này cho đến hiện tại, với tỉ lệ vượt trội 73.6%, bỏ xa 2 công cụ đứng sau là Visual Studio (29.3%) và IntelliJ (26.8%).
Theo mình VSCode sẽ còn giữ vị trí này rất lâu nữa.
Hiện nay hai công cụ AI-Native IDE phổ biến nhất: Cursor và Windsuft, lẫn IDE mới ra đời của AWS (Kiro) đều được fork từ Code-OSS, là bản open-source của VSCode.
VSCode được Microsoft giới thiệu và phát hành miễn phí năm 2015 tại hội nghị Build 2015 cùng bản open-source. Tuy nhiên, quá trình phát triển VSCode ở Microsoft diễn ra từ trước đấy khá lâu, từ năm 2011, bởi một người mà chắc hẳn nhiều lập trình viên thế hệ 8x từng "nhìn thấy" tên của ông.
Lịch sử phát triển và open-source hoá
Giai đoạn 2011 - 2015
Người đó là Erich Gamma, một trong 4 tác giả Gang of Four với cuốn sách "Design Patterns: Elements of Reusable Object-Oriented Software" huyền thoại.
Không chỉ là tác giả học thuật, ông còn là đồng tác giả của JUnit và phụ trách cấu phần Java Development Tool trong IDE kinh điển Eclipse.
Năm 2011, Microsoft tiếp cận Erich, khi đó đang là kỹ sư cao cấp (distinguished engineer) tại IBM. Nắm bắt được sự quan tâm của Erich trong việc xây dựng một công cụ lập trình online, Microsoft mời Erich gia nhập công ty để xây dựng phiên bản web-based của Visual Studio - IDE nổi tiếng trên nền desktop của họ.
Erich sau đó đồng ý gia nhập Microsoft cùng một số đồng nghiệp ở IBM. Họ tiếp tục làm việc ở Zurich, Thuỵ Sĩ, lập nên một phòng thí nghiệm cho dự án, với tên gọi Monaco.
Năm 2013, họ phát hành phiên bản Visual Studio Online, hướng đến các lập trình viên web, với khả năng tích hợp cloud mạnh mẽ, nhằm mục đích kéo lập trình viên tới các dịch vụ cloud của Microsoft.
Hiện tại, Erich vẫn tham gia dự án VSCode, tuy ông đã lùi lại phía sau, nhường vị trí trưởng nhóm cho Kai Maetzel, người gia nhập dự án năm 2015, có vai trò quan trọng với Copilot Extension - phần mềm cũng vừa được open-source tháng 6 năm nay.
Tháng 10/2014, với nhiệm vụ xây dựng phiên bản cross-platform desktop IDE, nhóm dự án quyết định lựa chọn công nghệ Electron, khi đấy có tên Atom Shell, còn rất non trẻ nhưng đầy tiềm năng, để kết hợp với lõi Monaco Editor, tạo nên sản phẩm IDE Visual Studio Code desktop, có thể chạy trên tất cả các hệ điều hành.
Có nhiều lý do dẫn đến quyết định này, bên cạnh lý do kỹ thuật là tăng khả năng tích hợp của bản online, theo mình lý do chủ yếu đến từ chiến lược của Microsoft dưới thời Satya Nadella, người trở thành CEO của Microsoft vào tháng 2/2014.
Họ giới thiệu VSCode desktop tại sự kiện thường niên Build tháng 4/2015 và ra mắt bản public preview một tháng sau đó.
Mặc dù vẫn có phiên bản web, từ đoạn này của bài viết, từ VSCode nhắc đến bản VSCode desktop mà chủ yếu các bạn đang dùng.
Giai đoạn sau 2015
VSCode đạt mốc 1 triệu lượt tải vào tháng 11/2015, mặc dù vẫn đang public preview.
Đấy cũng là thời điểm họ phát hành bản Beta và tuyên bố open-source VSCode, cùng với đó là sự ra đời của Marketplace. Đây là một phần trong chiến lược của Microsoft mà chúng ta sẽ bàn ở phần sau.
Tháng 4/2016, họ phát hành bản 1.0, phiên bản stable đầu tiên với 2 triệu lượt tải và 500.000 daily active user.
Kai nói rằng họ đã tổ chức “big party” khi đạt 1 triệu user, và một “big party” nữa khi đạt 2 triệu và từ đó thì họ xem đấy là chuyện bình thường. Cũng phải thôi, dù không công bố chính thức số lượt tải, Microsoft cho biết họ vừa đạt mức 50 triệu người dùng hàng tháng cho 2 IDE chính của họ Visual Studio và VScode. Theo tỉ lệ sử dụng của hai công cụ, phần lớn trong số 50 triệu người dùng này đang sử dụng VSCode.
Trong thông báo vào tháng 5/2025, có hơn 100 nghìn extensions được phát hành trên VSCode Marketplace, không chỉ góp phần tăng tiện ích cho người dùng, mà còn biến VSCode thành IDE cho mọi ngôn ngữ lập trình.
Vậy Erich, Kai và team đã làm thế nào để xây dựng VSCode trở thành công cụ ổn định và có khả năng mở rộng cao đến vậy?
Từ khía cạnh kỹ thuật
Dưới đây là một số thông tin mình rút ra từ nội dung bài phỏng vấn Erich và Kai năm 2024. Mọi người có thể nghe lại ở link youtube trong phần tài liệu tham khảo.
Sự ổn định đến từ mô hình Internal và Community contribution
Lựa chọn chiến lược open-source ngay từ phiên bản Beta tháng 11/2015, Code-OSS, hiện tại có hơn 2000 lập trình viên (contributor) tham gia đóng góp vào mã nguồn mở này, với hàng nghìn commit mỗi tháng.
Điểm đáng chú ý là top 25 contributors của mã nguồn này đến từ team VSCode của Erich ở Zurich. Trong đó có những thành viên làm việc rất lâu ở nhóm này, như Benjamin Pasero, người gia nhập dự án từ năm 2011, tức là đã làm cùng Erich tận 15 năm.
Giữ văn hoá như một công ty start-up với sản phẩm VSCode, họ dùng VSCode của chính họ làm IDE phát triển, cảm nhận khó khăn và nhu cầu của người dùng. Dự án cam kết sử dụng 25% thời gian để xử lý các technical-debt của sản phẩm.
Erich nói, họ giữ một phiên bản internal, tổ chức nhóm dự án gồm gần 30 lập trình viên và giữ nhịp độ phát triển, phát hành mỗi tháng một lần. Khi bản internal sẵn sàng, họ sẽ đóng góp mã nguồn vào phiên bản Code-OSS.
Điều này phản ánh chiến lược open-source đặc sắc của Microsoft: Họ cung cấp sản phẩm do họ xây dựng miễn phí, kèm với mã nguồn, với mục đích xây dựng cộng đồng.
Ở chiều ngược lại, nhiều tính năng từ cộng đồng cũng được đưa vào phần lõi (core) của VSCode.
Có một câu chuyện thú vị về extension Bracket Pair Colorization.
Câu chuyện cải tiến extension Bracket Pair Colorization
Được phát hành bởi tài khoản CoenraadS vào năm 2016 cho version 1 và bản cải tiến version 2 năm 2018, đây là extension đánh màu cho cả cặp dấu ngoặc nhọn, sử dụng cơ chế mở rộng của VSCode.
Extension này hoạt động tốt với các file nhỏ nhưng xử lý rất tệ ở các file mã nguồn dài. Trong khi các file rất dài là đặc sản của các mã nguồn web. Theo mô tả của VSCode, với một file mã nguồn Typescript có độ dài 42k dòng của chính open-source Typescript, khi thêm 1 dấu đóng ngoặc nhọn, Bracket Pair Colorization xử lý mất 10 giây để tô màu lại các cặp dấu ngoặc của file. Trong 10 giây đó, CPU bị ngốn 100% và IDE bị treo hoàn toàn đến khi màu được tô xong.
Hiện tượng này đến từ cơ chế giao tiếp giữa việc hiển thị giao diện ở UI và extension host (chúng ta sẽ tìm hiểu kỹ hơn ở phần sau), khiến cho tốc độ tìm kiếm và tô màu bị tăng đáng kể, đặc biệt ở các file dài.
Để xử lý triệt để hạn chế này, ở bản cập nhật 1.60 vào 8/2021, nhóm dự án quyết định đưa tính năng của extension này vào phần core của VSCode. Cùng với nhiều cải tiến về thuật toán duyệt cây cấu trúc (abstract syntax tree), tốc độ xử lý đã giảm từ 10 giây về mức 1 millisecond, tức là 10 nghìn lần!
Bạn có thể đọc chi tiết cải tiến kỹ thuật này ở official blog của VSCode.
Kiến trúc extension: Tách biệt và Chuẩn hoá
Khi tìm hiểu một hệ thống, công nghệ mới, để dễ ghi nhớ, mình thường kết nối (linking) giải pháp xử lý của công nghệ đó với các pattern về kiến trúc hoặc lập trình cơ bản.
Cùng dừng một chút để nhớ lại các pattern trong thiết kế hệ thống (separate of concern) và lập trình (proxy, adapter).
Câu trả lời nằm ở hai nguyên tắc: Tách biệt và Chuẩn hoá.
Trong kiến trúc ứng dụng, VSCode tách biệt 3 phần riêng rẽ ở 3 process khác nhau:
UI Rendering: Chịu trách nhiệm hiển thị giao diện và xử lý các thao tác của người dùng. Đây là phần chúng ta thấy khi sử dụng VSCode.
Extension Host: Là một process NodeJS runtime riêng biệt, đóng vai trò proxy giao tiếp giữa UI và các extensions.
Language Server: Là process xử lý logic trải nghiệm riêng cho từng ngôn ngữ lập trình, như auto completion, syntax checking, ....
Kiến trúc này tách biệt tài nguyên giữa các layer, đảm bảo trải nghiệm của người dùng ở UI luôn mượt mà, tối thiểu là các thao tác cơ bản được cung cấp bởi code editor của VSCode.
Ở khía cạnh chuẩn hoá, năm 2016, Microsoft giới thiệu Language Server Protocol (LSP), là giao thức chuẩn hoá kết nối giữa Language Server và IDE.
Theo Erich, việc định nghĩa trải nghiệm lập trình của một ngôn ngữ nên đến từ hệ sinh thái tạo ra ngôn ngữ lập trình đó. Do vậy, họ cung cấp cơ chế mở rộng Language Extension, cho phép cộng đồng có thể phát triển các bản extension cho ngôn ngữ mình yêu thích, miễn là các bản extension đó tuân theo chuẩn, tức là kết nối được với VSCode qua LSP.
Sơ đồ trên mô tả cách thức kết nối giữa các Language Server với Extension Host và VSCode.
Nhắc lại chiến lược xây dựng cộng đồng của Microsoft, không chỉ cung cấp cơ chế mở rộng, chính VSCode team trực tiếp phát triển Language Extension cho hầu hết các ngôn ngữ lập trình nguồn mở phổ biến như Python, Java, ....
Chiến lược quyến rũ giới công nghệ của Microsoft
Có thể nói, Microsoft trước thời Satya Nadella là thành trì chống open-source, đối đầu trực diện với Linux và Java. Trong cuộc phỏng vấn năm 2001, CEO thời đó, Steve Ballmer từng nói Linux là nguồn gốc lây lan căn bệnh ung thư "mã nguồn mở", đe doạ phần mềm bản quyền.
Có một video nói về một ông bố là tín đồ .Net và dành tâm sức truyền đam mê đó cho con trai mình. Cậu bé lớn lên lại dành tình yêu hết mình với Java, chờ đến năm 18 tuổi để thú nhận: I use Java! Video có tiêu đề là "Java Forever And Ever", các bạn có thể xem trên Youtube. Video hài hước, tuy nhiên thể hiện rất hình tượng về xung đột giữa .Net và Java ở thời điểm hơn 15 năm về trước.
Ấy thế mà, khi Satya Nadella lên nắm quyền CEO Microsoft vào tháng 2/2014, mọi thứ thay đổi hoàn toàn, đặc biệt với thông điệp "Microsoft love Linux" được ông thể hiện ngay trong sự kiện Microsoft Cloud Briefing tháng 10 năm đó.
Vốn là lãnh đạo mảng điện toán đám mây và dịch vụ trực tuyến của Microsoft, Satya hiểu rằng khi mọi thứ ở trên cloud thì nền tảng và ngôn ngữ không còn quan trọng nữa. Mục tiêu tối thượng là tác động và mang đến cái nhìn tích cực của cộng đồng đối với Microsoft, từ đó thúc đẩy các đối tác sử dụng sản phẩm, dịch vụ của công ty.
Quay lại thời điểm tháng 10/2024, khi dự án của Erich quyết định đóng gói bản VSCode desktop có thể chạy trên mọi nền tảng. Đây là một bước đi nằm trong chiến lược cross-platform của toàn bộ Microsoft.
Cùng thời điểm đó, họ công bố thông tin gây chấn động cộng đồng công nghệ - thực hiện open-source hoá phiên bản .NET core có khả năng chạy cross-platform. Hai năm sau là ASP.NET core, bản open-source của ASP.NET, tất nhiên cũng hỗ trợ cross-platform.
Năm 2016, với uy tín và sự kết nối của Reid Hoffman, Microsoft mua lại thành công LinkedIn. Hai năm sau, họ mua lại Github trong một thương vụ gây nhiều hoài nghi từ cộng đồng mã nguồn mở.
Vượt qua các luồng ý kiến trái chiều, thậm chí là làn sóng từ bỏ Github chuyển qua Gitlab, Bitbucket, Microsoft giữ đúng cam kết để Github vận hành độc lập, tiếp tục cung cấp nhiều tiện ích miễn phí cho public repo. Đến năm 2023, Github cán mốc 100 triệu người dùng, so với con số 30 triệu vào năm 2018. Thậm chí họ đạt mốc này sớm hơn tới 2 năm so với kế hoạch ban đầu.
Kết lại
Có thể từ góc nhìn tài chính sẽ có thước đo định lượng về ảnh hưởng của chiến lược xây dựng hình ảnh tốt trong mắt cộng đồng phát triển phần mềm đối với kết quả kinh doanh của Microsoft trong những năm vừa qua, kể từ khi Satya Nadella trở thành CEO của công ty.
Từ quan điểm của một người trong nghề công nghệ thông tin, mình thấy rõ sự hiện diện và ảnh hưởng tích cực của Microsoft và các sản phẩm của họ trong công việc hàng ngày, đặc biệt là với các lập trình viên.
Với việc tích hợp chặt chẽ Github - nền tảng quản lý mã nguồn lớn nhất thế giới vào VSCode - công cụ IDE phổ biến nhất, Microsoft đã đạt được mục tiêu chinh phục tình cảm và gắn kết cộng đồng phát triển phần mềm một cách tích cực vào hệ sinh thái của mình.
Ở kỷ nguyên ứng dụng AI vào phát triển phần mềm, hứa hẹn Microsoft sẽ gặt hái được nhiều thành quả từ chiến lược phân phối miễn phí mã nguồn mở trong những năm qua.
Một số link tham khảo
Copilot Open Sourced! w/ Erich Gamma and Kai Maetzel
The Story of Visual Studio Code with Erich Gamma and Kai Maetzel




