Thứ Tư, 11 tháng 4, 2012

Microsoft và Nguồn mở


Microsoft and Open Source
Posted by Sebastien Lambla on April 5, 2012
Bài được đưa lên Internet ngày: 05/04/2012
Lời người dịch: Đến lúc mô hình phát triển nguồn đóng từng là đặc sản của Microsoft và bản thân Microsoft cũng PHẢI quy hàng trước mô hình phát triển của phần mềm nguồn mở. Điều đó là có lợi cho chính Microsoft, chứ không phải cách giả vờ như không biết những dự án PMNM xung quanh làm gì, trong khi mình lại muốn ôm lấy các ý tưởng và thậm chí những công việc mà các cộng đồng PMNM đã và đang tiến hành rồi. Việc tạo lại cái bánh xe, dù có là công ty khổng long như Microsoft, cũng vẫn là vô nghĩa, mà điểm mấu chốt khác biệt với các dự án PMNM, năm ở chính mô hình phát triển của các dự án PMNM đó, là chia sẽ, là minh bạch, minh bạch và minh bạch. Đó là tinh thần của bài viết này, một bài viết từ một lập trình viên 14 năm tại Microsoft. Có lẽ nó còn là bài học cho nhiều công ty khác, chứ không phải chỉ Microsoft.
Tôi từng hòa vào sự chỉ trích, và đôi khi nặng nề về tiếp cận của Microsoft đối với phần mềm nguồn mở (PMNM). Tôi gọi đó là chủ nghĩa tích cực, một số gọi nó là hay than vãn, nói huênh hoang hoặc tè vào bát súp. Mọi người bị lôi theo ý kiến của họ, và của tôi đã được hình thành sau khi làm việc trong môi trường Microsoft ít nhiều 14 năm. Qua những năm đó, nhiều tổ chức thành phần trong Microsoft đã có nhiều mức có liên quan tới PMNM, với những triết lý khác nhau, và từ những gì tôi đã thu thập được quan những năm đó từ những cuộc nhậu nhẹt sau hội nghị, những xung đột nội bộ mà có thể hoàn toàn là một thách thức.
Vì bài này dài, tôi sẽ tóm tắt vấn đề, và bạn có thể đi tới kết luận để đọc những gì tôi tin nên được thực hiện khác đi.
Microsoft không có tầm nhìn khi nói về PMNM, không có chiến lược và không có sự lãnh đạo. Một số nhóm được xem như là tiến bộ, và có xu hướng hướng về một tiếp cận tốt hơn về PMNM. Một số người xem những bước đó là đủ để dừng ép Microsoft hướng tới PMNM một cách có trách nhiệm, và tôi không đồng ý: đó chỉ là một số nhóm, và thậm chí bên trong các nhóm đó, những tiến bộ phần lớn là của một nhà xuất khẩu. Việc thừa nhận Microsoft như một tay chơi thân thiện với PMNM giống như việc thừa nhận Cộng hòa Nhân dân Trung hoa dưới thời của tổng thống Reagan, một bước theo hướng bình thường hóa, chứ không phải nhận thức về những thành tích suốt đời về Quyền Con người của Mao Trạch Đông.
I have been a vocal, and sometimes harsh, critic of Microsoft’s approach to Open Source Software. I call that activism, some call it whining, ranting or pisser dans la soupe. People are entitled to their opinion, and mine has been formed after working in the Microsoft sphere for more or less 14 years.
Over the years, the various component organizations within Microsoft have had various levels of involvement with Open Source, with different philosophies, and from what I have gathered over the years from post-conference drinks, internal conflicts that can be quite a challenge.
As this post is going to be long, I’m going to sum-up the problem, and you can go to the conclusion bit to read what I believe should be done differently.
Microsoft has no vision when it comes to Open-Source, no strategy and no leadership. Some groups are seen as more progressive, and do tend towards a better approach to OSS. Some people consider those steps as sufficient to stop pressuring Microsoft towards responsible OSS, and I disagree: it’s only some groups, and even within those groups, the advances are still very much one of exporter. Recognizing Microsoft as an OSS-friendly player is like recognizing the People’s Republic of China under the Reagan administration, it’s a step in the direction of normalization, not a recognition of the Human Right lifetime achievements of Mao Tsedung.
Untitled6Bạn biết vì sao tôi BIẾT Microsoft không có lãnh đạo và tầm nhìn khi nói về PMNM không? Vì tôi đã hỏi Steve Ballmer khi ông ta ở Luân Đôn, và ông ta đã trả lời thế này: “Tôi không biết, nhưng chúng tôi sẽ áp đặt bất kỳ tầm nhìn nào lên các bộ phận của chúng tôi. Dù tôi sẽ quay lại với bạn qua thư điện tử”. Steve, thư điện tử của tôi vẫn là seb@serialseb.com và tôi vẫn chờ các quan điểm của ông đấy.
Chúng ta tới từ đâu
Hiện trạng công việc không tồi, xét về nơi mà Microsoft nhiều năm trước. Chúng tôi đang nói về một công ty mà tự định vị mình như là người bảo vệ cho các mã nguồn riêng, phỉ báng các giấy phép PMNM, không có dự án PMNM trực quan nào đang diễn ra và cung cấp giá trị của nó như là kho được tích hợp: đó là tất cả Microsoft hoặc không gì cả. Chúng tôi chắc chắn đã đi một con đường xa.
Mở ra chậm chạp
Tôi nghĩ dưới ảnh hưởng của Scott Guthrie, một sự thay đổi trong nội bộ đã bắt đầu sâu bên trong xếp hạng của đội ASP.NET, chắc chắn một sự dịch chuyển mà đã gây ra trong công bố gần đây của việc mở ra kho web ASP.NET như một dự án PMNM thực sự.
Bây giờ ĐIỀU ĐÓ có thể đáng tuyên dương, và tôi vỗ tay cho động thái đó. Mở nguồn và mở ra sự phát triển cộng tác cho thứ mà bạn đã xây dựng là tốt. Làm tốt.
Không sáng tạo trong hội chứng của Redmond
Hãy rõ ràng. Mục tiêu của MVC từng để xây dựng một con đường một ray tốt hơn, ngược lại để giúp con đường 1 ray sản phẩm hóa khung của họ để đưa vào trong Visual Studio.
Thứ chính xác y hệt đã xảy ra với Nuget. Với nhiều dự án với các tiếp cận khác nhau đã đang làm việc, Microsoft đã bắt đầu dự án NPack của hãng (tôi dường như đã nhắc ai đó tại Oredev, nhắc rằng ban đầu đây từng là một phần của công cụ của các trang web Webpages). Nó đã không mở nguồn ngay từ đầu, lý do vì sao những dự án PMNM hiện hành đã không có được những tin tức cho tới muộn về sau.
Nhưng, tôi nghe bạn nói, Nuget là một dự án PMNM từ Outercurve, và chúng đã kết hợp mã nguồn của chúng với dự án khác. Việc mở nguồn đã được quyết định rất muốn trong quá trình đó, khi sự đóng góp mã từng quá lớn mà con tàu đã rời rồi và không thể nào dừng nó lại được. Và trong một lưu ý ngoài lề, đó từng không phải sự trộn mã nguồn, thông cáo báo chí của quỹ Outercurve từng không chính xác, chỉ như là trong lịch sử mà thôi.
Điều thực sự xảy ra khi một dự án mới được Microsoft sản xuất chăng? Nó mút không khí từ nhiều dự án cộng đồng, thường bao gồm tất cả những ý tưởng tốt nhát của dự án được nói, và Microsoft không trả ngược lại gì. Nếu bạn trong con thuyền đó, bạn hoặc vẽ lại các kế hoạch của bạn dựa vào những công bố mới của họ (thường viết lại trên đỉnh của mẩu sáng chói mới đó), hoặc bạn giải tán nhóm của bạn và tham gia vào dự án PMNM của họ (trường hợp của Nuget / Nubular).
Các dự án nhất định (như nhibernate và nunit) tiếp tục hạnh phúc tiến lên, và có thể những lựa chọn thay thế PMNM mà bị ảnh hưởng bởi Microsoft nhảy vào một không gian từng chưa đủ tốt. Tôi không biết, chúng ta sẽ thấy trong một vài năm nữa.
You know why I know Microsoft has no leadership and vision when it comes to Open-Source? Because I asked Steve Ballmer when he was in London, and he replied with this: “I don’t know, but we won’t impose any view on our divisions. I’ll come back to you by email though.” Steve, my email is still seb@serialseb.com and I’m looking forward to your views.
Where we come from
The current state of affairs is not bad, considering where Microsoft was years ago. We’re talking about a company that positioned itself as the defender of private code, vilifying OSS licenses, having no visible OSS project going and providing its value as the integrated stack: it’s all MS or none. We have certainly come a long way.
Opening up slowly
I think under the influence of Scott Guthrie, an internal change started deep within the asp.net team ranks, certainly a movement that resulted in the recent announcement of the opening up of the asp.net webstack as a true Open-Source project.
Now that’s commendable, and I applaud the move. Open-Sourcing and opening up to collaborative development for stuff you’ve built is great. Well done.
Not invented in Redmond syndrome
Let’s be clear. The goal of MVC was to build a better Monorail, as opposed to help Monorail productize their framework for inclusion in Visual Studio.
The exact same thing happened with Nuget. With multiple projects with different approaches already in the work, Microsoft started their NPack project (I seem to recall someone at Oredev mentioning it was originally built as part of the WebPages tooling). It wasn’t to be open-source to start with, hence why the existing OSS projects didn’t get the news until much later.
But, I hear you say, Nuget is an open-source project from Outercurve, and they combined their code with another project. The open-sourcing was decided very late in that process, once the investment in code was so large that the ship had left already and nothing would stop it. And on a side-note, there was no merging of the code, the Outercurve foundation’s press release was inaccurate, just look at the history.
What really happens when a new project gets produced by Microsoft? It sucks the air out of a lot of community projects, often including all the best ideas of said projects, and Microsoft gives nothing back. If you’re in that boat, you either redraw your plans based on their new announcements (usually rewriting on top of the new shiny stuff), or you dissolve your group and join their OSS project (the Nuget / Nubular case).
Certain projects (like nhibernate and nunit) continue to happily go forward, and maybe the OSS alternatives that are impacted by Microsoft entering a space just were not good enough. I don’t know, we’ll see in a few years.
Thích nghi các dự án hiện đang tồn tại
Tất nhiên có thể nói, và một lần nữa, tôi khen ngợi Microsoft về động thái đó, rằng các thư viện như jQuery, modernizr và bây giờ Newtonsoft.Json, đang được sử dụng, được Microsoft hỗ trợ và xuất cùng với sản phẩm.
Điều này cũng là một sự khởi hành tốt từ thời thượng cổ. Tuy nhiên đừng sai lầm, Microsoft đang bị sức ép của thị trường phải tích hợp với các khung công việc đó, thúc đẩy. Sự thay đổi chỉ là họ đang bỏ qua chậm chạp ý tưởng rằng họ sẽ phát hành cho tới khi họ giành được thị phần, trong những lĩnh vực nơi mà Microsoft về lịch sử đã chậm phát hành so với các nền tảng thay thế khác.
Đây chỉ là một mẩu ý kiến, nhưng tôi sẽ gợi ý rằng động thái để giành được phần phát triển web đã đẩy Microsoft hướng tới việc bỏ các dự án mà họ đã có và thất bại để phổ biến (asp.net AJAX ít nhiều bị giết khi jQuery đã được áp dụng). Và tôi nghĩ điều đó tốt.
Chủ nghĩa thực dụng cũng là lý do vì sao newtonsoft.json đang được Web API sử dụng. Các nhà cung cấp Json hiện hành trên .net là phân rã, không có cách gì để cung cấp sự tùy biến mà mọi người muốn, và việc sửa lỗi cho chúng không thể hoàn thành trong cùng các chu kỳ phát hành như MVC, khi một số là các các phần của khung cốt lõi (và có thể có hoặc có thể không bao giờ được sửa lỗi cả, mà chắc chắn không đúng lúc cho phát hành tiếp sau).
Điều đó đã không được chọn vì Microsoft muốn nhận nuôi nhiều dự án PMNM bên ngoài hơn như là tầm nhìn cốt lõi của hãng. Nó đã được chọn vì họ không thể sửa lỗi những những đã bị vỡ và việc xây dựng lại có thể là ngu xuẩn).
Adoption of existing projects
Of course it can be said, and there again, I commend Microsoft for the move, that libraries such as jQuery, modernizr and now Newtonsoft.Json, are being used, supported by Microsoft and shipped alongside the product.
This is also a great departure from time immemorials. Makes no mistake however, Microsoft is being pushed by market pressure to integrate with those frameworks. The change is only that they’re abandoning slowly the idea that they’ll release until they gain marketshare, in those domains where Microsoft has historically been slow at releasing compared to alternative platforms.
This is only an opinion piece, but I’ll suggest that the move to gain web development share has pushed Microsoft towards dropping the projects they had and failed to make popular (the asp.net  AJAX stuff that got more or less killed when jQuery was adopted). And I think that’s great.
Pragmatism is also the reason why newtonsoft.json is being used by Web API. The current Json providers on .net are broken, there is no way to provide the customization people want, and fixing them cannot be done in the same release cycles as MVC, as some are part of the core framework (and may or may never be fixed, but certainly not in time for the next release).
It was not chosen because Microsoft wants to adopt more external OSS projects as their core vision. It was chosen because they couldn’t fix what was broken and rebuilding would have been silly.
Trong một lưu ý bên lề, những thảo luận trên twitter đã bắt đầu đi theo hướng vì sao Newtonsoft.Json từng được chọn hơn các thư viện khác. Tôi đã làm một sự khẳng định rằng miễn là nó là một triển khai nội bộ không có bề mặt lộ diện, thì lựa chọn thư viện json *bất kỳ* có thể là tốt. ScottHa nói đó là vì thư viện đó từng là phổ biến nhất, và việc kiểm thử đã được thực hiện trong phần của họ. Điều đó đã dẫn tôi tới khẳng định rằng nếu chỉ thư viện đang xem xét được chọn vì sự phổ biến, không có bề mặt lộ diện của thư viện đó trong các API công khai, thì sự lựa chọn là một trong những việc lướt thương hiệu và trao thêm điểm marketing cho những thay đổi từng tí một của PMNM. Nếu một số API được lộ diện, thì có thể nó là một lựa chọn hợp lý. Tôi không quan tâm thư viện nào bạn chọn, tôi quan tâm tới qui trình bạn đã sử dụng để chọn thư viện nào và lý do đăng sau nó. Tôi hỏi (và bằng câu hỏi, tôi ngụ ý thảo luận) những động cơ, chứ không phải là giải pháp.
[Sửa: Sau khi tìm nó (như trên twitter đã không trả lời cho đặc thù của thảo luận), một đối tượng từ json.net *được lộ diện* trên JsonMediaTypeFormatter, vì đó là thế và tôi sẽ bám theo phân tích ban đầu của mình, có lẽ đó là một sự lựa chọn hợp lý].
Không có tầm nhìn, vì không có tiếp cận thệ thống cho việc giải quyết giữa việc xây dựng và tham gia vào cộng đồng.
ASP.NET Web API có thể hoàn toàn hạnh phúc tham gia các dự án PMNM đang tồn tại mà làm việc với lĩnh vực của vấn đề này hàng năm trước, nhưng nó đã không làm thế. Nuget thấy có thể được sử dung trên định của các dự án đang tồn tại, thay vì một sự tạo lại thuần túy, nhưng nó đã không làm thế nốt. Đâu là qui trình quyết định đằng sau sự quyết định xây dựng lại hoặc tham gia này?
Và ai có thể đã có dự án của họ bị hút hết oxy, với không có gì được trao ngược trở lại, bị kêu không tin tưởng vào công ty đó nhỉ?
On a side-note, twitter conversations started going in the direction of why Newtonsoft.Json was chosen over other libraries. I made the assertion that provided it’s an internal implementation with no exposed surface, the choice of *any* json lib would’ve been fine. ScottHa said it was because the library was the most popular, and testing was done on their part. That lead me to the assertion that if the only library under consideration was chosen for popularity, and there is no exposed surface of that lib on public APIs, the choice is one of brand-surfing and gives extra marketing points to their OSS credentials. If some of the API is exposed, it was probably a reasonable choice. I don’t care which library you chose, I care the process you used to chose which library and the reasoning behind it. I question (and by question, I mean discuss) the motives, not the solution.
[Edit: After looking for it (as the twiterverse didn’t reply to the specific of the discussion), one object from json.net *is* exposed on the JsonMediaTypeFormatter, so that is that and I’ll stick to my original analysis, it’s probably a reasonable choice.]
There is no vision, because there is no systemic approach to deciding between building and joining communities.
Asp.net Web API could have quite happily join existing OSS projects that dealt with this problem area years ago, but it wasn’t to be. Nuget funding could have been used on top of existing projects, instead of a pure creation, but it wasn’t to be either. What is the decision process behind the rebuild or join decision?
And can anyone that has had their project get the oxygen sucked out of, with nothing given back, be blamed for distrusting the company?
220px-Borg_Queen_2372Tập đoàn
Khi dự án Web API từng được khởi xướng, Glenn Block đã gọi tôi hỏi tôi liệu tôi có nghĩ anh ta nên nhận công việc đó không, và nếu anh ta nhận, liệu tôi có giúp không. Tôi đã nói với anh ta những gì tôi đang nói cho bạng bây giờ: Có, bạn không thể làm tồi tệ như những dự định trước đó, và tôi sẽ hạnh phúc giúp để chắc chắn kiến trúc và mô hình đó khớp với thực tế của những gì các lập trình viên mong muốn, chúng ta tất cả sẽ thắng. Tôi đã giúp vì tôi được hỏi. Lý tưởng mà nói tôi thà họ đã hỏi tôi làm việc trong OpenRasta và tạo ra một phiên bản mới với chúng tôi, như điều đó đã không xảy ra. Cuối cùng, 2 khung có thể có mã nguồn rất khác nhau, nhưng hầu hết các khái niệm và qui ước là chính xác y hệt nhau, nên mỗi người sẽ cảm thấy đúng ở nhà trên cả 2 nền tảng, và điều đó không phải là trong đo đếm nhỏ vì những cái đầu sáng láng đằng sau HTTP được tôn trọng Web API nhiều như tôi và những cố vấn khác đã làm.
Rất gần đây, Drew Miller từ đội NuGet đã rất tích cực trong việc mở các kênh giao tiếp với OpenWrap, thứ gì đó mà còn chưa tồn tại tới nay, và anh ta nên được ngợi khen về điều đó: tôi bây giờ có thể có một thảo luận về câu chuyện bên trong của chúng tôi với ai đó mà muốn làm cho mọi điều tốt hơn. Một lần nữa, tôi muốn đội NuGet đã ra nhập OpenWrap hơn là giao tiếp với chúng tôi phát hành sắp tới của họ, cách quá chậm để có được bất kỳ kết quả tích cực nào, mà ít nhất là một bước theo đúng đường.
Nhưng ai là các cá nhân, không phải công ty, và đứng ngoài tất cả tiếng nói ngoài đó, họ là một thiểu số. Bạn không thể phán xét toàn bộ công ty về những cá nhân đặc biệt, và các đội không thể sử dụng lời bào chữa Microsoft thực sự là nhiều công ty. Điều đó chắc chắn đúng, nhưng hoàn toàn không phù hợp cho những đại lý bên ngoài khi phán xét cách mà công ty làm việc với PMNM.
The corporation
When the Web API project was being kicked off, Glenn Block called me asking me if I thought he should take the job, and if he did, would I help. I told him what I’m telling you now: Yes, you can’t do as bad as the previous attempts, and I’ll happily help to make sure the architecture and model fits the reality of what developers want, we’ll all win. I helped because I was asked. Ideally I’d rather they had asked me to work on OpenRasta and create a new version with us, but it was not to be. In the end, the two frameworks may have very different code, but most of the concepts and conventions are exactly the same, so everyone will feel right at home on both platforms, and that’s in no small measure because the brilliant minds behind Web API respected HTTP as much as I and the other advisors did.
More recently, Drew Miller from the NuGet team has been very active in opening communication channels with OpenWrap, something that has not existed ever, and he should be applauded for it: I can now have a discussion about our interop story with someone that wants to make things better. Again, I’d rather the NuGet team had joined OpenWrap rather than communicate to us their imminent release, way too late to get any positive outcome, but at least it’s a step in the right direction.
Those are individuals, not the company, and out of all the voices out there, they are a minority. You cannot judge the whole company on specific individuals, and teams cannot use the excuse Microsoft is really many companies. That is certainly true, but completely irrelevant to external agents when judging how the company deals with OSS.
transparencySửa điều này thế nào
3 từ, minh bạch, minh bạch, minh bạch.
Khi bạn có một ý tưởng về một sản phẩm, và có các dự án PMNM đang tồn tại ngoài đó mà có sự áp dụng và có thể thực sự giúp các nguồn của một một nhà cung cấp lớn, hãy cố thử và chứng minh sự lựa chọn.
Nếu bạn định xây dựng lại, hãy cầm lấy điện thoại, gọi cho người cầm đầu, giải thích các kế hoạch của bạn, và đừng có thụt rửa về nào (giống như nói cho ai đó “chúng tôi nhận thức chúng tôi đang rón rén trên đầu ngón chân ở đây nhưng chúng tôi là lớn nên nó sẽ xảy ra” không phải là một cách đặc biệt tốt để đưa ra thông tin). Những cơ hội là, họ sẽ có thể hiểu lý do. Các nhà cung cấp phần mềm độc lập đã có kênh giao tiếp đó từ Microsoft nhiều năm, và hiểu về việc cạnh tranh các sản phẩm chạy trước, nhưng đó không phải là cách cho các dự án PMNM.
Hãy cũng là mở về qui trình trước đã. Chính sách không nhắc tới bất kỳ ai, hoặc giả vờ bạn không thể nhìn vào các dự án đang tồn tại hoàn toàn trong công chúng, có thể làm cho bất kỳ ai nghĩ bạn có thứ gì đó giấu giếm. Nó có lẽ là chống lại một số chính sách của công ty ở đâu đó, nhưng làm như vậy, bạn đã làm cho nó về chính sách phi PMNM.
Và cuối cùng, giá trị mà mọi người trong nền tảng của bạn, những cái mồm to tiến như tôi và những con người nhỏ bé mà quên các dự án của họ vì bạn đã bắt đầu của bạn. Chúng tôi là trong nền tảng của bạn vì chúng tôi thích nó, và chúng tôi muốn làm cho nó tốt hơn. Và có thể nếu bạn đang dẫm lên các đầu ngón chân của mọi người, thì hãy thử tìm một đội trợ giúp cho họ để làm ngọt ngào cho cú đánh, và hãy tìm cách để cộng tác trong thứ gì đó nữa với họ. Đừng đánh mất mọi người mà đã và đang phát triển những ý tưởng bạn đang xây dựng trên đó, đó không phải là một việc làm tốt.
Nếu những thứ đó đã xảy ra trong vài năm qua, thì tôi có lẽ không tin Microsoft-công ty nhiều như bây giờ. Nhưng những chiếc cầu mà đang được xây dựng bởi những cá nhân sáng láng trong công ty đang đi theo đúng hướng.
Liệu điều đó có là đủ? Tôi chân thành không biết, nhưng cho tới khi chúng ta ở đó, tôi sẽ tiếp tục hét lên trên đỉnh tiếng nói của tôi cho Microsoft để trở thành đối tác kinh doanh đối với các dự án PMNM mà tôi muốn làm việc với.
Điều đó gọi là tình yêu bền lâu, thật ngu dại.
How to fix this
Three words, transparency, transparency, transparency.
When you have an idea for a product, and there are existing Open-Source projects out there that have adoption and could really help the resources of a big vendor, try and justify the choice.
If you’re going to rebuild, take the phone, call the leader, explain your plans, and don’t be a douche about it (aka telling someone “we realize we are stepping on toes here but we’re big so it’ll happen” is not particularly a great way to deliver the news). Chances are, they’ll probably understand the reasoning. ISVs have had that communication channel from Microsoft for years, and get to know about competing products way in advance, but it’s not the case for OSS projects.
Be open about the process afterwards too. The policy of not mentioning anyone, or pretending you cannot look at existing projects at all in public, would make anyone think you have something to hide. It probably is against some corporate policy somewhere, but make that change, you did do it about the no-OSS policy.
And finally, value the people on your platform, the loud mouths like me and the small guys that abandon their projects because you started yours. We are on your platform because we like it, and we want to make it better. And maybe if you’re going to step on people’s toes, try to find a band aid for them to sweeten the blow, and find a way to collaborate on something else with them. Don’t lose the people that have been developing the ideas you’re going to be building on, it’s not good business.
If these things had happened in the last few years, I wouldn’t distrust Microsoft-the-company as much as I do now. But the bridges that are being built by bright individuals inside the company do go in the right direction.
Is that going to be enough? I sincerely don’t know, but until we’re there, I’ll continue shouting at the top of my voice for Microsoft to become the business partner my OSS projects wants to be dealing with.
It’s called tough love, silly.
Dịch tài liệu: Lê Trung Nghĩa

Không có nhận xét nào:

Đăng nhận xét

Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.