อธิบายความแตกต่าง .NET Framework, .NET Core, .NET 5, .NET Standard, Xamarin

by mk
17 October 2019 - 08:46

นับตั้งแต่ไมโครซอฟท์ประกาศเปิดซอร์ส .NET ในปี 2014 โลกของ .NET ก็เปลี่ยนไปจากเดิมมาก เราเห็นชื่อใหม่ๆ โผล่ขึ้นมามากมาย ทั้ง .NET Foundation, .NET Core, .NET Standard, Xamarin, .NET 5 ซึ่งสร้างความสับสนอยู่บ่อยครั้ง

บทความนี้จะอธิบายคำศัพท์ที่พบบ่อยในโลก .NET ช่วงหลัง เพื่อให้คนที่ไม่ได้ติดตามวงการ .NET อย่างใกล้ชิด สามารถทำความเข้าใจได้ง่ายขึ้นครับ

.NET คืออะไรกันแน่

.NET เปิดตัวครั้งแรกในปี 2002 โดยตลอด 17 ปีที่ผ่านมา ไมโครซอฟท์ก็ใช้คำว่า .NET อย่างพร่ำเพรื่อมากในฐานะคำเท่ๆ ด้านการตลาด (เราเคยถึงขั้นมีแบรนด์ Windows .NET และ Visual Studio .NET ด้วยซ้ำ ดีแค่ไหนแล้วที่ยังไม่มี Office .NET)

แต่ถ้าตัดเอาคำด้านการตลาดออกไป ความหมายของ .NET คือเฟรมเวิร์คหรือแพลตฟอร์มในการพัฒนาแอพพลิเคชัน ที่แปลงภาษาโปรแกรมในตระกูล .NET (ปัจจุบันเหลือ 3 ภาษาคือ C#, F#, Visual Basic แต่ในอดีตก็มีภาษาอื่นๆ ด้วยที่ไม่ได้รับความนิยมเท่า) มาเป็นภาษากลางที่เรียกว่า Common Intermediate Language (CIL) จากนั้นนำไปรันบนระบบปฏิบัติการต่างๆ ผ่านรันไทม์ Common Language Runtime (CLR) อีกชั้นหนึ่ง

ไมโครซอฟท์นำแนวคิดของ .NET มาจาก Java Platform โดยสามารถเทียบ CIL เป็นเหมือน bytecode และ CLR เป็นเหมือน JVM ในโลกของ Java นั่นเอง

แนวคิดของไมโครซอฟท์ในยุคนั้นคือต้องการ "ยกระดับ" เครื่องมือการพัฒนาซอฟต์แวร์ของค่ายตัวเองให้ไปไกลกว่าการพัฒนาซอฟต์แวร์แบบเนทีฟในอดีต แม้ว่าในยุคนั้นเราไม่ได้เห็น .NET บนระบบปฏิบัติการคู่แข่งบนพีซี (Mac/Linux) แต่ไมโครซอฟท์ก็ประสบความสำเร็จ (ในระดับหนึ่ง) ในการผลักดัน .NET ให้ไปไกลกว่าแอพบนเดสก์ท็อป เช่น ASP.NET (เว็บ) หรือ .NET Compact Framefork (อุปกรณ์พกพา)

.NET Framework ทุกอย่างเริ่มต้นที่นี่

แนวคิด .NET ถูกผลักดันมาเป็นซอฟต์แวร์จริงๆ ที่จับต้องได้ในชื่อว่า .NET Framework ซึ่งเป็น implementation เวอร์ชันต้นฉบับของไมโครซอฟท์เอง ที่ออกเวอร์ชัน 1.0 ในปี 2002

ไมโครซอฟท์พัฒนาฟีเจอร์ให้ .NET Framework อย่างต่อเนื่องในทศวรรษ 2000s โดยพื้นฐานของ .NET Framework ถือว่าสมบูรณ์ในเวอร์ชัน 2.0 (2005) ตามด้วยการเพิ่มฟีเจอร์ใหม่ๆ อย่าง WPF, WCF, WF ใน .NET 3.0 (2006) จากนั้นเป็นฟีเจอร์ระดับสูงอย่าง Entity Framework, LINQ ในเวอร์ชัน 3.5 (2007) และ 4.0 (2010)

หลังจากไมโครซอฟท์ออก .NET Framework 4.5 ในปี 2012 การพัฒนาก็เริ่มช้าลง เพราะไมโครซอฟท์ปรับยุทธศาสตร์ไปเน้นที่ .NET Core แทน แต่ตัว .NET Framework ก็ยังได้อัพเดตย่อยอยู่เรื่อยๆ โดยเวอร์ชันล่าสุดคือ .NET Framework 4.8 ที่เพิ่งออกเมื่อเดือนเมษายน 2019

ถึงแม้ว่า .NET Framework เป็นซอฟต์แวร์ที่ได้รับความนิยมอย่างสูง แต่ข้อจำกัดของมันคือทำงานได้เฉพาะบน Windows เท่านั้น (เวอร์ชันใดบ้างขึ้นกับยุคสมัย ถ้า ณ ปัจจุบันคือต้องเป็น Windows 7 ขึ้นไป) และตัวมันเองเป็นซอฟต์แวร์แบบปิดซอร์ส (แม้ว่าช่วงหลังจะทยอยเปิดซอร์สบางส่วนออกมาก็ตาม)

Mono/Xamarin ทางเลือกของระบบปฏิบัติการทางเลือก

ข้อจำกัดของ .NET Framework ที่ทำงานได้เฉพาะบน Windows ส่งผลให้เกิดความต้องการใช้งาน .NET บนระบบปฏิบัติการทางเลือกอื่นๆ (ในยุคนั้นคือ Mac/Linux) จึงมีบริษัทซอฟต์แวร์ชื่อ Ximian สร้างซอฟต์แวร์ที่เข้ากันได้กับมาตรฐาน .NET (CIL/CLR) ขึ้นมาอีกตัว (นับเป็นอีก implementation) ในชื่อว่า Mono และออกเวอร์ชัน 1.0 ในปี 2004

เป้าหมายของ Mono ในยุคแรกคือเปิดให้เขียนโปรแกรมด้วย C# บนระบบปฏิบัติการลินุกซ์ได้ ตัวโครงการ Mono เป็นโอเพนซอร์สที่สนับสนุนโดย Ximian ซึ่งมีกำลังเงินไม่เยอะนัก ในช่วงแรกของ Mono จึงวิ่งไล่ตามฟีเจอร์ของ .NET Framework เวอร์ชันไมโครซอฟท์อย่างช้าๆ

การเปลี่ยนแปลงของ Mono เกิดขึ้นหลังทีมงาน Ximian โดนเจ้าของใหม่ Attachmate เลย์ออฟในปี 2011 ทำให้ทีมงานหลักมาเปิดบริษัทใหม่ชื่อ Xamarin และรับช่วงโครงการ Mono มาทำต่อ

บริบทของยุคสมัย Xamarin เปลี่ยนไป เพราะโลกเริ่มเข้าสู่ยุคสมาร์ทโฟนเต็มตัว ทำให้ Xamarin หันมาโฟกัสที่การนำเครื่องมือฝั่ง C# จากโครงการ Mono มาใช้สร้างแอพพลิเคชันบน Android/iOS เป็นหลัก โดยชูจุดเด่นว่าเขียน C# เพียงครั้งเดียว ได้แอพ 2 ตัวบน 2 แพลตฟอร์มเลย (ช่วยให้นักพัฒนาสาย C# เข้าสู่โลกมือถือได้ง่ายขึ้นมาก)

เครื่องมือตัวนี้เรียกว่า Xamarin Studio เป็นการนำซอฟต์แวร์โอเพนซอร์ส Mono มารวมกับซอฟต์แวร์ปิดของ Xamarin เอง (แปลว่า Xamarin ตัวที่ขายทำเงินนั้นปิดซอร์ส) แนวทางนี้ทำให้ Xamarin เติบโตและอยู่รอดได้ในเชิงธุรกิจ

การเปลี่ยนแปลงเกิดขึ้นอีกครั้งในปี 2016 เมื่อไมโครซอฟท์ประกาศซื้อ Xamarin, เปลี่ยนมาแจก Xamarin ฟรี, เปิดซอร์สโค้ดบางส่วนของ Xamarin (รวมถึงย้ายบริการสำหรับนักพัฒนาตัวอื่นๆ ของ Xamarin ที่ไม่ใช่ .NET โดยตรงเข้ามาอยู่ในเครือ Visual Studio ด้วย) ทำให้สถานะของ Xamarin เปลี่ยนไป จากสินค้าที่ใช้ทำเงินเลี้ยงบริษัท กลายมาเป็นอีก implementation ของแพลตฟอร์ม .NET ที่เน้นการพัฒนาแอพพลิเคชันบนสมาร์ทโฟน Android/iOS

.NET Core คิดใหม่ทำใหม่ เพื่อทุกแพลตฟอร์ม

ไมโครซอฟท์หันหัวเรือของ .NET ครั้งใหญ่ในปี 2014 โดยประกาศเปิดซอร์สโค้ดของ .NET Framework และยกให้องค์กรกลางคือ .NET Foundation เป็นผู้ดูแล ตัวอย่างบริษัทอื่นที่เข้าเป็นสมาชิกของ .NET Foundation ได้แก่ Red Hat, JetBrain, Unity, Samsung รวมถึงคู่แข่งรายสำคัญอย่าง Google ด้วย

หลังเปิดซอร์สโค้ดบางส่วนของ .NET Framework ไมโครซอฟท์และ .NET Foundation ก็เดินหน้าพัฒนามันต่อในชื่อใหม่ว่า .NET Core

เหตุที่ไมโครซอฟท์ต้องใช้คำว่า Core เป็นเพราะว่ามันมีฟีเจอร์เพียงแค่บางส่วนของ .NET Framework เวอร์ชันต้นฉบับเท่านั้น จากข้อมูลของไมโครซอฟท์เอง ระบุว่า .NET Core เวอร์ชัน 1.0 มี API เพียงแค่ประมาณ 18,000 ตัว เทียบกับ API ทั้งหมดของ .NET Framework 4.8 ที่มีมากถึง 2 แสนกว่าตัว

จุดเด่นของ .NET Core คือการทำงานข้ามแพลตฟอร์มทั้ง Windows, Mac, Linux แต่ช่วงแรกของ .NET Core ก็ยังจำกัดรูปแบบงานเฉพาะแอพพลิเคชันแบบคอมมานด์ไลน์, แอพแบบ UWP และเว็บแอพ (ASP.NET) เป็นหลัก (พูดง่ายๆ มันคือการเปิดให้เราเอา ASP.NET ไปรันบนลินุกซ์ได้)

แต่ภายหลัง ไมโครซอฟท์ก็ไล่เพิ่มฟีเจอร์และ API ให้กับ .NET Core มาเรื่อยๆ เช่น รองรับภาษา VB, F# เพิ่มเติม จนถึงเวอร์ชันล่าสุดคือ .NET Core 3.0 ที่รองรับการรันแอพเดสก์ท็อปแบบดั้งเดิม (WinForms, WPF) แม้ว่าใช้งานได้เฉพาะบนวินโดวส์ แต่ก็ช่วยให้แอพเดสก์ท็อปเก่าๆ ที่เขียนด้วย .NET Framework สามารถทำงานบน .NET Core ได้

เราอาจพอพูดได้ว่า .NET Core เป็นการเขียน .NET Framework ขึ้นมาใหม่ให้เข้ากับยุคโอเพนซอร์ส-ข้ามแพลตฟอร์ม (โดยใช้แกนตัวเดียวกัน แต่ถือว่าเป็นคนละ implementation) ที่ผ่านมา .NET Core ยังวิ่งไล่ตามฟีเจอร์ของ .NET Framework ให้ทัน แต่ล่าสุดไมโครซอฟท์เพิ่งบอกว่าหยุดพอร์ต API จาก .NET Framework แล้ว ด้วยเหตุผลว่า API หลายตัวของ .NET Framework เป็นของเก่าที่อาจมีคนใช้งานไม่เยอะนัก (เช่น WCF ที่ไมโครซอฟท์เลือกไม่พอร์ตมายัง .NET Core) และเปิดให้เป็นหน้าที่ของชุมชนโอเพนซอร์สที่ (อาจ) สนใจเข้ามาทำหน้าที่นี้แทน

.NET Standard มาตรฐานกลางสำหรับทุกคน

มาถึงตรงนี้ เรารู้จัก implementation ของ .NET กันมาแล้ว 3 ตัว ได้แก่ .NET Framework ต้นฉบับ, .NET Core ตัวใหม่ และ Xamarin ที่ถูกซื้อกิจการมา

.NET ทั้งสามตัวพัฒนาขึ้นบนเทคโนโลยี CIL/CLR เหมือนกัน แต่แตกต่างกันในรายละเอียด และแต่ละตัวก็มีโฟกัสกลุ่มลูกค้าที่แตกต่างกัน เช่น

  • .NET Framework สำหรับแอพเดสก์ท็อปยุคเก่า (WinForms/WPF) หรือเว็บแอพ (ASP.NET)
  • .NET Core สำหรับแอพเดสก์ท็อปยุคใหม่ (UWP) หรือเว็บแอพ (ASP.NET) บนระบบปฏิบัติการอื่น
  • Xamarin แอพบนสมาร์ทโฟน (Android/iOS)

แต่ส่วนที่ซ้อนทับกันก็มี ตรงนี้ทำให้นักพัฒนาสับสนว่า .NET แต่ละ implementation ทำงานร่วมกันได้แค่ไหน เราสามารถนำโค้ดของเราที่เขียนบน .NET Framework ไปรันบน .NET Core ได้หรือไม่ ฯลฯ

ไมโครซอฟท์จึงแก้ปัญหานี้ด้วยการกำหนด .NET Standard ที่ตัวมันเองไม่ใช่ซอฟต์แวร์ แต่เป็นมาตรฐานกลางในโลกของ .NET เองให้รู้ว่า .NET แต่ละชุด แต่ละเวอร์ชัน รองรับฟีเจอร์ใดบ้าง

ผู้ที่สนใจข้อมูลนี้ สามารถดูได้จากหน้าเว็บ .NET Standard ซึ่งเลือกเวอร์ชันของ .NET Standard ที่ต้องการได้ (เวอร์ชันล่าสุดคือ .NET Standard 2.1) เพื่อดูตารางว่า .NET ตัวใดซัพพอร์ตบ้าง

.NET 5 จักรวาลรวมเป็นหนึ่ง

จักรวาลของ .NET ในปัจจุบันมีทั้งหมด 3 implementation แยกตามกลุ่มลูกค้า แต่ทั้ง 3 กลุ่ม 3 ทีมล้วนแต่เป็นคนของไมโครซอฟท์ทั้งหมดแล้ว (หลังการซื้อ Xamarin)

แผนการของไมโครซอฟท์จึงเป็นการหลอมรวม .NET ทั้งสาม (ซึ่งมีที่มาแตกต่างกัน) ให้เป็นหนึ่งเดียว

กรณีของ .NET Framework กับ .NET Core นั้นชัดเจนว่า .NET Core คืออนาคต และ .NET Framework จะหยุดพัฒนาแล้วค่อยๆ เลิกใช้ไปในระยะยาว (แอพ "ส่วนใหญ่" ที่รันบน .NET Framework จะสามารถทำงานบน .NET Core ได้)

เมื่อ .NET Core พัฒนามาจนสมบูรณ์พอแล้ว มันจะใช้แทน .NET Framework ได้ ช่วงกลางปีนี้ไมโครซอฟท์จึงเปิดตัว .NET 5 ที่ไม่มีคำว่า Core หรือ Framework ต่อท้ายให้สับสนกันอีกต่อไป (กลายเป็นตัวเดียวกันแทน) ส่วนเลขเวอร์ชัน 5 เป็นการนับต่อจาก .NET Framework 4.x และกรณีของ .NET Core ก็คือข้ามเวอร์ชัน 4.0 ไปเลย

.NET 5 ยังเป็นการหลอมรวมสายของ .NET Core กับ Xamarin เข้าด้วยกัน (โดยยังใช้ระบบรันไทม์คู่ เลือกได้ว่าจะใช้รันไทม์ CoreCLR ของ .NET Core หรือรันไทม์ Mono ของ Xamarin) การรวมจักรวาล .NET เป็นหนึ่งเดียว ทำให้การเขียนแอพบน .NET 5 ถือว่าเป็นตัวเดียวครบจบทุกงาน เขียนได้ทั้งแอพเดสก์ท็อป (WinForms, WPF, UWP), เว็บแอพ (ASP.NET), สมาร์ทโฟน (Xamarin) รวมถึงงานด้านอื่นๆ อย่างการเขียนเกม (Unity) และอุปกรณ์ IoT ด้วย

.NET 5 มีกำหนดออกช่วงปลายปี 2020 และหลังจากนั้น ไมโครซอฟท์จะออก .NET เวอร์ชันใหม่ปีละครั้งช่วงปลายปี (.NET 6 ในช่วงปลายปี 2021 และนับเลขเวอร์ชันต่อไปเรื่อยๆ)

Blognone Jobs Premium