นับตั้งแต่ไมโครซอฟท์ประกาศเปิดซอร์ส .NET ในปี 2014 โลกของ .NET ก็เปลี่ยนไปจากเดิมมาก เราเห็นชื่อใหม่ๆ โผล่ขึ้นมามากมาย ทั้ง .NET Foundation, .NET Core, .NET Standard, Xamarin, .NET 5 ซึ่งสร้างความสับสนอยู่บ่อยครั้ง
บทความนี้จะอธิบายคำศัพท์ที่พบบ่อยในโลก .NET ช่วงหลัง เพื่อให้คนที่ไม่ได้ติดตามวงการ .NET อย่างใกล้ชิด สามารถทำความเข้าใจได้ง่ายขึ้นครับ
หลังจากไมโครซอฟท์ออก .NET Core 3.0 เมื่อปลายเดือนกันยายน เมื่อวานนี้ Immo Landwerth ผู้จัดการโครงการก็ออกมาโพสบน GitHub ประกาศว่าเวอร์ชั่นนี้จะเป็นเวอร์ชั่นสุดท้ายที่ไมโครซอฟท์จะลงแรงพอร์ต API จาก .NET Framework มายัง .NET Core แล้ว
การทำงานร่วมกันระหว่าง .NET Framework และ .NET Core ต้องอาศัย Windows Compatibility Pack ที่พอร์ต API ประมาณ 21,000 รายการมาให้ โดยรวมแล้วตอนนี้ .NET Core 3.0 รองรับ API ของ .NET Framework 120,000 รายการหรือประมาณครึ่งหนึ่ง ขณะที่ตัว .NET Core มี API ของตัวเองที่ไม่มีบน .NET Framework อยู่ประมาณ 62,000 รายการ
AWS ประกาศเข้าร่วมเป็นสมาชิก .NET Foundation ที่ไมโครซอฟท์ตั้งในปี 2014 ในฐานะสปอนเซอร์ระดับองค์กร
AWS ซัพพอร์ท .NET มานานตั้งแต่ราวปี 2008 รวมถึงมี SDK สำหรับ .NET ให้ด้วยแม้จะไม่นิยมเท่าภาษาอื่น จากปริมาณดาวบน GitHub ก็ตาม ขณะที่การเข้ามาเป็นสมาชิกของ AWS ทำให้บริษัทได้ที่นั่งใน Advisory Council เช่นเดียวกับอีก 10 บริษัทที่เป็นสปอนเซอร์อย่าง Microsoft, Google, Red Hat, Samsung เท่ากับว่า .NET Foundation มีสมาชิกเป็นผู้ให้บริการคลาวด์ใหญ่ครบ 3 เจ้าแล้ว
ที่มา - AWS, .NET Foundation
เมื่อกลางปีที่แล้ว ไมโครซอฟท์ประกาศแผนการออก .NET Core 3.0 ซึ่งเป็นการอัพเกรดครั้งใหญ่ของ .NET Core เวอร์ชันโอเพนซอร์ส โดย .NET Core จะรองรับการรันแอพเดสก์ท็อปที่เขียนด้วย Windows Forms กับ Windows Presentation Framework (WPF) ด้วย ทำให้แอพที่เขียนด้วย .NET Framework เดิมสามารถนำมารันบน .NET Core ได้ (รองรับเฉพาะการรันบนวินโดวส์ด้วยกันเท่านั้น)
หลังออกรุ่นพรีวิวมาหลายตัว วันนี้ .NET Core ออกรุ่นเสถียรแล้ว ฟีเจอร์ใหม่ๆ ในรุ่นนี้นอกจากเรื่องการรองรับแอพเดสก์ท็อป WinForms, WPF ได้แก่
ไมโครซอฟท์ปล่อย .NET Core 3.0 Preview 7 รุ่นที่น่าจะไม่มีการแก้ไข API เกือบทั้งหมดอีกต่อไป ทำให้พร้อมใช้งานจริงบน production แล้ว โดยไมโครซอฟท์ระบุว่าเว็บ .NET เองก็เปลี่ยนมาใช้ .NET Core 3.0 Preview 7 นี้แล้ว
สถานะ Go Live แปลว่าไมโครซอฟท์จะซัพพอร์ต API ส่วนใหญ่ และควรมีการแก้ไขน้อยมากแล้ว ยกเว้นไว้เฉพาะ WPF, Windows Forms, Blazor, และ Entity Framework
ความเปลี่ยนแปลงสำคัญคือ .NET Core 3.0 รุ่นนี้จะใช้พื้นที่ติดตั้งน้อยลงมาก เช่นรุ่นลินุกซ์นั้นใช้พื้นที่ 332 เมกกะไบต์ จากเดิม 1068 เมกกะไบต์ ส่วนคอนเทนเนอร์นั้นถ้าเป็น Debian ขนาดจะเหลือเพียง 264 เมกกะไบต์ และ Alpine เหลือเพียง 148 เมกกะไบต์เท่านั้น
แผนการเรื่อง .NET ของไมโครซอฟท์คือ หลอมรวมเวอร์ชันต่างๆ ของ .NET เป็นหนึ่งเดียว โดย .NET Core 3 ที่จะออกในปีนี้ เป็นการนำฟีเจอร์สำคัญๆ จาก .NET Framework เดิมมาสู่ .NET Core
ฟีเจอร์ที่ได้ย้ายจาก .NET Framework มายัง .NET Core 3 คือฟีเจอร์ด้าน UI เช่น Windows Forms และ Windows Presentation Framework (WPF)
แต่ชาว .NET คงทราบกันดีว่า สมัย .NET Framework ออกเวอร์ชัน 3.0 ไมโครซอฟท์ยังได้เพิ่มฟีเจอร์ Windows Communication Foundation (WCF) และ Windows Workflow มาพร้อมกัน รวมถึงฟีเจอร์อื่นๆ อย่าง ASP.NET Web Forms และ .NET Remoting
จักรวาลของไมโครซอฟท์มีเครื่องมือสร้าง GUI หลายตัว ตั้งแต่ของเก่าอย่าง Win32 ไล่มาถึงยุค Windows Forms, WPF และล่าสุดคือ UWP ความแตกต่างของแพลตฟอร์มทั้ง 4 ทำให้เรียกใช้คอมโพเนนต์/คอนโทรลต่างๆ ร่วมกันได้ยากพอสมควร
ล่าสุดในงาน Build 2019 ไมโครซอฟท์เปิดตัว XAML Islands หรือการฝังคอนโทรล UWP ในแอพพลิเคชันที่ไม่ใช่ UWP (เช่น Win32, WinForms, WPF) ได้ด้วย
ฟีเจอร์นี้ทำให้เราสามารถฝังคอนโทรลรุ่นใหม่ๆ จากแอพยุค UWP ที่มีจุดเด่นคือหน้าตาสวยงาม (เป็น Fluent Design) หรือรองรับอินพุตแบบใหม่ๆ (เช่น การใช้ปากกา) ลงในแอพพลิเคชันยุคเก่าได้ด้วย
การเดินทางอันยาวนานของ .NET หลากหลายแพลตฟอร์มกำลังจะสิ้นสุดลง เพราะไมโครซอฟท์ประกาศทำ .NET 5 ที่เป็นการรวม .NET ทั้ง 3 สายคือ .NET Framework ตัวดั้งเดิม, .NET Core เวอร์ชันโอเพนซอร์ส และ Xamarin เข้าด้วยกัน
ผลคือ .NET 5 (ใช้ชื่อ .NET เฉยๆ ไม่มีสร้อยใดๆ ต่อท้าย) จะเป็น .NET ตัวเดียวที่ทำงานได้หลากหลายแพลตฟอร์ม ตั้งแต่ Windows, Linux, macOS, iOS, Android ไปจนถึงอุปกรณ์ IoT และเอนจินเกม Unity
Apache Spark กลายเป็นซอฟต์แวร์มาตรฐานในการวิเคราะห์ข้อมูลขนาดใหญ่แบบเรียลไทม์ แต่ภาษาโปรแกรมที่เชื่อมต่อกับ Spark ได้ยังจำกัดอยู่แค่ภาษา Java, Python, Scala, R, SQL เท่านั้น
ไมโครซอฟท์จึงเอาใจชาว .NET ด้วยการเปิดตัว .NET for Apache Spark เพื่อให้สามารถใช้ภาษาตระกูล .NET (C#, F#) เชื่อมต่อกับ Spark ได้ด้วย
.NET for Apache Spark เป็นซอฟต์แวร์โอเพนซอร์ส เปิดโค้ดบน GitHub ทำงานข้ามแพลตฟอร์มได้ทั้งบนวินโดวส์ ลินุกซ์ แมค โดยตอนนี้ยังอยู่ในสถานะพรีวิว ต้องใช้ร่วมกับ .NET Core 2.1 ขึ้นไป
ขนานมากับ .NET Framework 4.8 ไมโครซอฟท์ยังมี .NET Core 3.0 เวอร์ชันโอเพนซอร์สและรันข้ามแพลตฟอร์ม ซึ่งตอนนี้ออกรุ่นพรีวิว 4 แล้ว
ฟีเจอร์สำคัญของ .NET Core 3.0 คือรองรับ Windows Forms และ Windows Presentation Framework (WPF) ทำให้แอพแบบ GUI ตัวเก่าๆ ที่เขียนด้วย .NET Framework สามารถพอร์ตมารันบน .NET Core ได้ (สักที!)
ไมโครซอฟท์ประกาศออก .NET Framework 4.8 ซึ่งเป็นรุ่นอัพเดตย่อยของ .NET Framework สาย 4.x บนแพลตฟอร์มวินโดวส์
ปัจจุบันไมโครซอฟท์แยก .NET เป็นสองตัวขนานกันคือ .NET Framework ของเดิม และ .NET Core เวอร์ชันโอเพนซอร์ส โดยจะเน้นพัฒนาของใหม่ให้ .NET Core มากกว่า แต่ .NET Framework ก็มีอัพเดตเล็กๆ น้อยๆ ไม่ถูกทอดทิ้งแต่อย่างใด
ของใหม่ใน .NET Framework 4.8 มีดังนี้
เมื่อปลายเดือนมกราคมที่ผ่านมา ไมโครซอฟท์ได้ออกอัพเดตให้กับ Windows Template Studio วิซาร์ดสำหรับขึ้นโครงร่างแอพ Universal Windows Platform ช่วยให้นักพัฒนาสามารถสร้างแอพต้นแบบซึ่งพร้อมให้นำไปแก้ไขและทดลองรัน ผ่านการตัวเลือกต่างๆ ได้ภายในไม่กี่คลิก
โดยใน WTS เวอร์ชัน 3.0 ได้มีการเปลี่ยนแปลงที่สำคัญคือ ต่อจากนี้เป็นต้นไปโค้ดของแอพที่ได้รับการสร้างโดย WTS จะออกมาในลักษณะ multi-project solution ซึ่งหมายความว่าแอพ UWP ตัวหนึ่งจะประกอบไปด้วยโปรเจ็กต์หลายโปรเจ็กต์ภายในโซลูชั่นเดียว
ต่อเนื่องจาก .NET Core 3 Preview 1 เมื่อปลายปี ไมโครซอฟท์ออกรุ่น Preview 2 ตามมา
การเปลี่ยนแปลงสำคัญของ .NET Core 3 คือการรองรับแอพเดสก์ท็อป (ทั้ง WPF และ Windows Form) โดยไมโครซอฟท์เปิดซอร์สโค้ดมาอยู่ใต้ .NET Foundation ด้วย (ก่อนหน้านี้ต้องเขียนบน .NET Framework เท่านั้น ไม่รองรับบน .NET Core สองเวอร์ชันแรก)
ของใหม่ใน Preview 2 คือการรองรับภาษา C# เวอร์ชัน 8.0 ที่เพิ่มฟีเจอร์ using declarations และ switch expressions เข้ามาในตัวภาษา, เพิ่ม Utf8JsonWriter สำหรับแปลงข้อความเป็น JSON แบบ UTF-8, ออกแพ็กเกจแบบ Snap บนลินุกซ์
ก่อนที่ไมโครซอฟท์จะเปิดโครงการ .NET Core ที่ทำให้นำ .NET ไปรันบนลินุกซ์ได้นั้น ไมโครซอฟท์ได้ก่อตั้ง .NET Foundation มาตั้งแต่ปี 2014 เพื่อดูแลโค้ด .NET จำนวนมากที่ปล่อยออกมา วันนี้ไมโครซอฟท์ก็ประกาศเปิดรับสมาชิกทั่วไป และเปิดให้คนภายนอกเป็นกรรมการมูลนิธิได้ง่ายขึ้น
ไมโครซอฟท์เปิดตัว .NET Core 3 Preview 1 ให้คนทั่วไปดาวน์โหลดความเปลี่ยนแปลงสำคัญคือมีไลบรารีเดสก์ทอปแล้ว หลังจาก .NET Core 2 ตัดส่วนนี้ออกไป
ตัว .NET Core เป็นโอเพนซอร์สในเวอร์ชั่นนี้ก็ยังเป็นเช่นเดิม โดยไมโครซอฟท์เปิดซอร์ส WPF, Windows Form, และ WinUI ออกมาพร้อมกัน โดยเฉพาะตัว WPF และ Windows Form นั้นอยู่ภายใต้ .NET Foundation และมีผู้ทั้งกูเกิล, เรดแฮต, ซัมซุง, Unity เข้ามาสนับสนุน
ความเปลี่ยนแปลงในตัวไลบรารีหลักมีอีกหลายอย่าง เช่น การรองรับ IoT ด้วยการรองรับพอร์ต UART บนลินุกซ์, รองรับ GPIO, PWM, SPI, และ I2C ส่วนในแง่ความปลอดภัยรองรับ TLS 1.3
โลกของ .NET ตอนนี้แยกเป็น .NET Standard (ตัวสเปก) กับ implementation อีกสามสายคือ .NET Core (โอเพนซอร์ส), .NET Framework (ไม่โอเพนซอร์ส), Xamarin (สำหรับเขียนแอพมือถือ)
ล่าสุดไมโครซอฟท์ประกาศออก .NET Standard เวอร์ชัน 2.1 ที่จะกลายเป็นเป้าหมายให้ .NET เวอร์ชันต่างๆ พัฒนาฟีเจอร์ตามในระยะถัดไป
สิ่งใหม่ใน .NET Standard 2.1 มีทั้งการเพิ่ม API เก่าจาก .NET Framework ของเดิม (มีอยู่แล้วแค่ปรับให้เป็นมาตรฐานกลาง) และเพิ่ม API ใหม่ โดยฟีเจอร์ใหม่ที่น่าสนใจคือการรองรับตัวแปรแบบ Span<T> เป็นตัวแปรลักษณะเดียวกับอาร์เรย์ ที่จะช่วยปรับปรุงเรื่องประสิทธิภาพของ .NET ในภาพรวม
ทิศทางของไมโครซอฟท์เรื่อง .NET ชัดเจนว่าต้องการย้ายจาก .NET Framework ไปสู่ .NET Core แต่การเปลี่ยนผ่านก็ยังไม่ง่ายนัก เพราะ .NET Core ยังขาดฟีเจอร์หลายอย่างที่เคยมีใน .NET Framework (เช่น การซัพพอร์ต WPF/WinForms ที่จะมาใน .NET Core 3.0)
อย่างไรก็ตาม สถานะของ .NET Core 2.x ในปัจจุบัน ถือว่าพร้อมแล้วสำหรับงานฝั่งเซิร์ฟเวอร์ ทำให้ทีมงาน Bing.com เวอร์ชันเว็บ ที่สร้างขึ้นตั้งแต่สมัย .NET Framework ตัดสินใจย้ายงานมารันบน .NET Core 2.1 ได้สำเร็จด้วยดีในเดือนมิถุยายนที่ผ่านมา
ก่อนหน้านี้ ไมโครซอฟท์ประกาศฟีเจอร์สำคัญของ .NET Core 3.0 คือรองรับ Windows Forms และ Windows Presentation Framework (WPF) ช่วยให้แอพเดสก์ท็อปที่เขียนด้วย .NET Framework สามารถนำมารันบน .NET Core ได้ (โดยปรับแก้เพียงเล็กน้อย)
เพื่อให้การเปลี่ยนผ่านครั้งนี้ราบรื่น ไมโครซอฟท์จึงออก Portability Analyzer เครื่องมือช่วยวิเคราะห์แอพเก่าที่เป็น WinForms/WPF ว่าทำงานบน NET Core 3.0 ได้ดีแค่ไหน และมีการเรียกใช้ API ตัวใดบ้างที่ .NET Core 3.0 ยังไม่รองรับ
Portability Analyzer ทำงานได้ทั้งในโหมด GUI และคอมมานด์ไลน์ หลังวิเคราะห์แล้วจะสร้างรายงานออกมาเป็นไฟล์ Excel ให้นักพัฒนาตรวจสอบได้ว่า ทำงานเข้ากันได้กับ .NET ตัวไหนบ้าง
ไมโครซอฟท์ประกาศหยุดซัพพอร์ต .NET Core 2.0 ที่เพิ่งออกเมื่อเดือนสิงหาคม 2017 โดยจะหมดอายุ (End of Life) ในวันที่ 1 กันยายน 2018
เหตุที่ .NET Core 2.0 หมดอายุเร็วว่าปกติ เป็นเพราะไมโครซอฟท์เพิ่งออก .NET Core 2.1 มาทดแทน และ .NET Core 2.1 เป็นรุ่น LTS ที่จะซัพพอร์ตยาวนาน 3 ปี ในขณะที่เวอร์ชัน 2.0 เป็นรุ่น Current ที่ซัพพอร์ตระยะสั้นเท่านั้น
ไมโครซอฟท์ออก .NET Core 2.1 เป็นรุ่นอัพเดตย่อยของ .NET Core 2.0 ที่ออกเมื่อเดือนสิงหาคม 2017
ความพิเศษของ .NET Core 2.1 คือมันจะเป็นรุ่นซัพพอร์ตระยะยาว (LTS) ของสาย 2.x มีระยะเวลาซัพพอร์ตนาน 3 ปี ไมโครซอฟท์อธิบายว่าแผนเดิมคือจะใช้ .NET Core 2.0 เป็นรุ่น LTS แต่สุดท้ายเปลี่ยนใจ เพราะอยากรอฟีเจอร์ใหม่ของ .NET Core 2.1 เรื่องจัดการเวอร์ชันของไฟล์ในโปรเจคต์ (platform dependencies) เพื่อให้รุ่น LTS เป็นรุ่นที่แก้ปัญหานี้เรียบร้อยแล้ว
.NET Core 2.1 เข้ากันได้กับ .NET Core 2.0 ซึ่งไมโครซอฟท์แนะนำให้คนที่ใช้ 2.0 อยู่แล้วอัพเกรดมาเป็น 2.1 ได้เลย
ในงาน Build 2018 เมื่อสัปดาห์ที่ผ่านมาไมโครซอฟท์ได้ประกาศแผนการออก .NET Core 3.0 และ .NET Framework 4.8 ซึ่งได้ให้ความสำคัญกับการปรับปรุงการพัฒนาแอพเดสก์ท็อปเดิมให้ทันสมัย โดยนอกเหนือจากการทำให้ .NET Core 3 รองรับการรันแอพเดสก์ท็อปแบบเก่าอย่าง WPF และ Windows Forms ได้ในข่าวก่อนหน้านี้
ไมโครซอฟท์ยังได้ประกาศเพิ่มของใหม่อีกอย่างให้กับการพัฒนาแอพเดสก์ท็อปในชื่อ UWP XAML Islands ซึ่งเป็นการปรับปรุงให้แอพพลิชั่นที่พัฒนาด้วยชั้น UI แบบเก่าทั้ง WPF, Windows Forms และ Win32 สามารถเรียกใช้ชุด UI Control ใหม่ๆ ที่ UWP มีให้ได้ ไม่ว่าจะเป็นตัวเล่นมีเดีย, แผนที่, Ink Canvas ไปจนถึง Edge WebView
ไมโครซอฟท์ประกาศแผนการออก .NET Core 3.0 ที่มาพร้อมฟีเจอร์สำคัญคือรองรับแอพแบบเดสก์ท็อป และการออก .NET Framework 4.8 ที่ทำงานคู่ขนานกันไป
สำหรับคนที่ไม่ได้ตาม .NET Core คือ .NET เวอร์ชันโอเพนซอร์สที่รองรับฟีเจอร์บางส่วนของ .NET Framework เดิม แต่สามารถทำงานได้ข้ามแพลตฟอร์ม (รองรับแมคและลินุกซ์ด้วย) ที่ผ่านมา .NET Core เน้นการใช้งานแอพพลิเคชันประเภท ASP.NET, คอมมานด์ไลน์ และแอพเดสก์ท็อปแบบ UWP เท่านั้น
ส่วนใน .NET Core 3 ไมโครซอฟท์ประกาศว่าจะรองรับแอพเดสก์ท็อปแบบเก่าอย่าง Windows Forms และ Windows Presentation Framework (WPF) ด้วย ทำให้ .NET Core จะสามารถรันแอพเดสก์ท็อป .NET รุ่นเก่าๆ ได้อย่างสมบูรณ์ (WPF และ WinForms ใช้ได้เฉพาะบนวินโดวส์)
ไมโครซอฟท์ออก .NET Framework 4.7.2 อัพเดตย่อยของ .NET Framework (ไม่พัฒนาฟีเจอร์ใหม่แล้ว ย้ายไปอยู่ใน .NET Core) โดยเวอร์ชัน 4.7.2 เป็นเวอร์ชันที่ถูกผนวกมาพร้อมกับ Windows 10 April 2018 Update ด้วย
ของใหม่ (บางส่วน) ในเวอร์ชันนี้ได้แก่
ไมโครซอฟท์ออก .NET Framework 4.7.1 ซึ่งเป็นการอัพเดตต่อจาก .NET Framework 4.7 ที่ออกในเดือนเมษายน
การอัพเดตครั้งนี้มาพร้อม Windows 10 Fall Creators Update โดยตัว .NET Runtime ที่มาพร้อมกับ Fall Creators Update ก็เป็นเวอร์ชัน 4.7.1 เช่นกัน (สำหรับคนที่ใช้ Windows รุ่นต่ำกว่านี้ก็สามารถดาวน์โหลดแยกเองได้)
การเปลี่ยนแปลงสำคัญคือ รองรับสเปก .NET Standard 2.0 ที่ออกในเดือนสิงหาคม ส่งผลให้ตอนนี้ .NET Framework (ไม่โอเพนซอร์ส) และ .NET Core (โอเพนซอร์ส) รองรับ API ตามมาตรฐาน .NET Standard เท่ากันแล้ว
ไมโครซอฟท์ปล่อยแพตช์ตามรอบปกติในเดือนกันยายน โดยเดือนนี้มีช่องโหว่ระดับวิกฤติทั้งหมด 25 รายการ และช่องโหว่ระดับสำคัญ 54 รายการ โดยช่องโหว่ CVE-2017-8759 ตัวอ่าน SOAP WSDL ที่รองรับข้อมูลผิดพลาดส่งผลให้ไฟล์ที่มุ่งร้ายรันโค้ดขึ้นมาได้
ทาง FireEye ระบุว่าพบไฟล์ "Проект.doc" (MD5: fe5c4d6bb78e170abf5cf3741868ea4c) อาศัยช่องโหว่นี้มีการโหลดมัลแวร์ FINSPY เข้าไปยังเครื่องของเหยื่อ
มัลแวร์ FINSPY เคยถูกตรวจพบมาแล้วก่อนหน้านี้โดยอาศัยช่องโหว่ CVE-2017-0199 แสดงให้เห็นว่ากลุ่มที่เผยแพร่มัลแวร์ตัวนี้มีศักยภาพสูงในการจัดหาช่องโหว่ใหม่ๆ ทำให้มีความเป็นไปได้ว่าเป็นหน่วยงานระดับรัฐที่มุ่งเป้าคอมพิวเตอร์ของผู้ใช้ภาษารัสเซีย