.NET

นับตั้งแต่ไมโครซอฟท์ประกาศเปิดซอร์ส .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 และนับเลขเวอร์ชันต่อไปเรื่อยๆ)

Hiring! บริษัทที่น่าสนใจ

Carmen Software company cover
Carmen Software
Hotel Financial Solutions
Next Innovation (Thailand) Co., Ltd. company cover
Next Innovation (Thailand) Co., Ltd.
We are web design with consulting & engineering services driven the future stronger and flexibility.
KKP Dime company cover
KKP Dime
KKP Dime บริษัทในเครือเกียรตินาคินภัทร
Kiatnakin Phatra Financial Group company cover
Kiatnakin Phatra Financial Group
Financial Service
Fastwork Technologies company cover
Fastwork Technologies
Fastwork.co เว็บไซต์ที่รวบรวม ฟรีแลนซ์ มืออาชีพจากหลากหลายสายงานไว้ในที่เดียวกัน
Thoughtworks Thailand company cover
Thoughtworks Thailand
Thoughtworks เป็นบริษัทที่ปรึกษาด้านเทคโนโยลีระดับโลกที่คว้า Great Place to Work 3 ปีซ้อน
Iron Software company cover
Iron Software
Iron Software is an American company providing a suite of .NET libraries by engineer for engineers.
CLEVERSE company cover
CLEVERSE
Cleverse is a Venture Builder. Our team builds several tech companies.
Nipa Cloud company cover
Nipa Cloud
#1 OpenStack cloud provider in Thailand with our own data center and software platform.
Bangmod Enterprise company cover
Bangmod Enterprise
The leader in Cloud Server and Hosting in Thailand.
CIMB THAI Bank company cover
CIMB THAI Bank
MOVING FORWARD WITH YOU - CIMB is the leading ASEAN Bank
Bangkok Bank company cover
Bangkok Bank
Bangkok Bank is one of Southeast Asia's largest regional banks, a market leader in business banking
MuvMi (Urban Mobility Tech Co.,Ltd.) company cover
MuvMi (Urban Mobility Tech Co.,Ltd.)
Shape the future of urban mobility towards affordable, clean, and safe solutions
T.N. Digital Solution Co., Ltd. company cover
T.N. Digital Solution Co., Ltd.
TNDS has been involving in every first move of banking’s major digital transformation.
KBTG - KASIKORN Business-Technology Group company cover
KBTG - KASIKORN Business-Technology Group
KBTG - "The Technology Company for Digital Business Innovation"
Siam Commercial Bank Public Company Limited company cover
Siam Commercial Bank Public Company Limited
"Let's start a brighter career future together"
Icon Framework co.,Ltd. company cover
Icon Framework co.,Ltd.
Global Standard Platform for Real Estate แพลตฟอร์มสำหรับธุรกิจอสังหาริมทรัพย์ครบวงจร มาตรฐานระดับโลก
REFINITIV company cover
REFINITIV
The Financial and Risk business of Thomson Reuters is now Refinitiv
H LAB company cover
H LAB
Re-engineering healthcare systems through intelligent platforms and system design.
The Gang Technology Co., Ltd. company cover
The Gang Technology Co., Ltd.
We're a Digital Agency that helps our customers transform their business into digital with ease.
LTMH company cover
LTMH
LTMH มุ่งเน้นการพัฒนาผลิตภัณฑ์ที่สามารถช่วยพันธมิตรของเราให้บรรลุเป้าหมาย
Seven Peaks company cover
Seven Peaks
We Drive Digital Transformation
Wisesight (Thailand) Co., Ltd. company cover
Wisesight (Thailand) Co., Ltd.
The Best Choice For Handling Social Media · High Expertise in Social Data · Most Advanced and Secure
MOLOG Tech company cover
MOLOG Tech
We are Modern Logistic Platform, Specialize in WMS, OMS and TMS.
Data Wow Co.,Ltd company cover
Data Wow Co.,Ltd
We enable our clients to realize increased productivity by solving their most complex issues by Data
LINE Company Thailand company cover
LINE Company Thailand
LINE, the world's hottest mobile messaging platform, offers free text and voice messaging + Call
LINE MAN Wongnai company cover
LINE MAN Wongnai
Join our journey to becoming No.1 food platform in Thailand

ถ้าเขียน UI เดียว แล้วทำงานได้บนทุก Device ได้เนี่ยจะกราบเลย ตอนนี้ต้องพึ่ง Flutter อยู่ แต่โดยรวมมันก็ดีขึ้นจริงๆ แหล่ะ จนผมถอยจาก Java มาใช้ .NET Core เป็นหลักสำหรับงาน Back-end แล้วตอนนี้

Architec Fri, 18/10/2019 - 14:32

เห็น Xamarin + UWP แล้วได้แต่ถอนหายใจยาวๆ ยาวมากกกก บอกกับตัวเองว่าไปเขียน Flutter เถอะ