.NET Core คืออะไร

.NET Core คืออะไร ??
.NET Core มีองค์ประกอบหลายส่วน อาทิ ตัว run time ชื่อ CoreCLR ซึ่งเป็นตัวrun time ที่มีทุกอย่างครบสมบูรณ์เช่นเดียวกับตัว run time CLR ใน .NET Framework ของ Windows
หน้าที่ของมันคือทำตัวเป็น virtual machine เพื่อ Run และดูแลโปรแกรมที่เขียนไว้เพื่อให้ทำงานใน .NET
การจะเข้าใจ .NET Core ท่านจะต้องเข้าใจ .NET Framework , ระบบนิเวศของมัน , ความเป็นมา , ส่วนประกอบต่าง ๆ ของมัน , version หรือชนิดต่าง ๆ และplatform แบบต่าง ๆ ที่มันทำงาน
ไมโครซอฟท์เริ่มทำงานกับ .NET Framework มาตั้งแต่ช่วงปลายทศวรรษที่ 90 และออกวางตลาดในปีค.ศ. 2002 ในรูปแบบ Framework เดี่ยว ๆ
นับจากนั้นมันก็เริ่มวิวัฒนาการและเข้าไปมีส่วนเกี่ยวข้องกับผู้คนในอุตสาหกรรม IT ทั่วทั้งโลก ได้รับการยอมรับจากนักพัฒนาว่าเป็น Framework ที่นิ่ง มีแบบจำลองโปรแกรมที่มั่นคง การ debug ทำได้ง่ายและมีประสิทธิภาพ ปัจจัยเหล่านี้เป็นเหตุให้ดอตเน็ตได้รับความนิยมจากนักพัฒนามากขึ้นเรื่อย ๆ
หลังจากออก .NET Framework ในปีค.ศ. 2002 ไมโครซอฟท์ก็ออก .NET Compact Framework
โดย .NET Compact Framework เป็นตัวที่เล็กลงของ.NET Framework สำหรับ Windows Mobile
ซึ่งเป็นระบบปฏิบัติการที่ถูกออกแบบมาเพื่อการใช้งานกับอุปกรณ์เคลื่อนที่อย่างสมาร์ทโฟนและแท็บเล็ต
โดย Framework นี้มีโค้ดฐาน run time Framework และแบบจำลองของapplication ต่างไปจาก .NET Framework
เมื่อออก.NET Compact Framework แล้ว ไมโครซอฟท์ก็ออกFramework อื่น ๆ ในทำนองเดียวกันอีกหลายตัว อาทิ Sliverlight ,Windows Phone ,Windows Store ฯลฯ
platform เหล่านี้มี Framework ที่มีลักษณะคล้าย.NET Compact Framework แต่ถูกสร้างและปรับปรุงแยกจากกันทั้งหมด เป็นสาเหตุให้เกิดปัญหาความไม่ลงรอยกันเพราะขาดการจัดการที่เป็นระบบ
ปัญหาความไม่ลงรอยนี้จะไม่เกิดขึ้นกับ Framework ที่ถูกออกแบบมาเพื่อให้ทำงานใน platform เดียว
ปัญหานี้เกิด เพราะไมโครซอฟท์ต้องการให้ .NET Framework ทำงานได้ในหลาย ๆ platform
API (Application Program Interface) ที่เขียนไว้ให้ทำงานได้อย่างมีประสิทธิภาพใน platform หนึ่ง แต่อาจทำงานได้อย่างไม่มีประสิทธิภาพหรือทำงานไม่ได้เลยในอีก platform หนึ่ง
ที่เห็นในภาพเป็น platform 3 ตัวคือ Windows Desktop , Windows Store และ Windows Phone
โดยแต่ละแท่งแนวตั้งคือ platform หนึ่งอัน
ลองคิดดูว่าการมี .NET Framework ที่ต้องทำงานได้ในหลาย ๆ platform เป็นอย่างไร
โดยเราจะดูเฉพาะ 2 แท่งทางซ้ายคือ Windows Desktop , Windows Store
สมมุติว่าเราต้องการเขียนโปรแกรมสั้น ๆ ที่ใช้โค้ดจาก library เดียวกันและต้องการให้ทำงานได้ในทั้ง 2 แท่ง
สมมุติว่าโจทย์ของเรา คือ ต้องการวาดภาพวงกลม
หากเป็นการเขียนโปรแกรมในระบบปฏิบัติการวินโดว์ส class library ของ .NET Framework ที่เราต้องใช้คือ library ที่อยู่ใน Name Space System.Drawing
สิ่งที่เราต้องทำคือเปิดโปรแกรม Visual Studio เขียนโปรแกรมภาษา C# (หรือภาษา .NET อื่น ๆ) แล้วเรียกใช้ method สำหรับวาดภาพวงกลม
แต่ถ้าท่านต้องการเขียนโปรแกรมซึ่งทำหน้าที่เดียวกันนี้ใน Windows Store
ท่านจะพบว่า Framework ของ Windows Store (ซึ่งเป็นเซตย่อยของ .NET Framework ตัวเต็ม) ไม่มี Name Space System.Drawing
หากต้องการวาดวงกลมท่านจำเป็นจะต้องใช้ method ใน class library Windows.Graphics.Imaging แทน
นี่คือตัวอย่างปัญหาความไม่ลงรอยกันระหว่าง .NET Framework ในระบบปฏิบัติการ windows กับใน platform อื่น ๆ ที่ไม่สามารถใช้ class library ชุดเดียวกันได้
ดังนั้นหากท่านต้องการพัฒนา application ที่ทำงานได้ในทุก ๆ platform
ท่านจำเป็นจะต้องแก้ไขโค้ดหรือไม่ก็สร้างแยกเป็นคนละตัวกันในทุก ๆ platform
ทำงานได้ในหลาย platform พร้อม ๆ กับ windows 8
ไมโครซอฟท์เสนอแนวคิดในการแก้ปัญหาความไม่ลงรอยกันของ .NET Framework ในแต่ละ platform
ด้วยสิ่งที่เรียกว่า portable class libraries ซึ่งเป็น library ที่ย้าย platform ได้)
ก่อนหน้าที่จะมี portable class libraries
การเขียน application แต่ละ platform จะใช้ข้ามกันไม่ได้
จำเป็นจะต้องเขียนใหม่แยกกันสำหรับแต่ platform
ซึ่งเป็นฝันร้ายของนักพัฒนาที่ต้องทำกระบวนการซ้ำเดิมทุกครั้งที่อยากให้ application ของตน run ได้เพิ่มขึ้นอีกสักหนึ่ง platform
ไมโครซอฟท์แก้ปัญหานี้ใน windows 8 โดยนำเสนอวิธีพัฒนา application แนวใหม่เรียกว่า metro-style
ซึ่งมีหลักการใหม่ในการสร้างเซตย่อยของ .NET Framework ผ่านกลไกที่เรียกว่า contracts
ซึ่งเป็นกลุ่ม assembly ที่เราจะต้องเขียนโค้ดตามข้อกำหนดของมัน
การทำเช่นนี้จะเป็นตัวกำหนดว่า application ของเราจะสามารถ run ใน platform ใด
หรือ Framework ใดได้ มีผลให้การพัฒนา applicationข้าม platform ทำได้ง่ายขึ้นมาก
หลักการ contracts นี้ภายหลังถูกเปลี่ยนชื่อเป็น .NET Standard ที่ผู้เขียนจะพูดถึงโดยละเอียดภายหลัง
Version ของ .Net
.NET Framework version แรกออกเมื่อต้นปี 2002 และ
version ล่าสุดคือ 4.7.2 ออกเมื่อเดือนเมษายน 2018 จึงเป็น Framework ที่มีอายุเกินสิบหกปีแล้ว
ส่วน .Net Core ออก version แรกเมื่อปี 2016 พร้อมกับ Visual Studio 2015 อัพเดต
เพื่อให้นักพัฒนาสามารถสร้าง application ด้วย.Net Core ได้
ต่อมาเดือนมีนาคมปี 2017 ออก version 1.11
พร้อมกับชุดเครื่องมือพัฒนาคือ .Net Core Tool 1.0 และ Visual Studio 2017
.Net Core version 2.0 ออกเดือนสิงหาคมในปีเดียวกัน
พร้อม Visual Studio 2017 version 15.3 ASP.NET Core 2.0 และ entity framework core 2.0
และประกาศ preview .NET Core 2.1 ในงานไมโครซอฟท์บิลด์เมื่อเดือนพฤษภาคม 2018
และในงานนี้ไมโครซอฟท์ยังแถลงแผนการของดอตเน็ตคอร์ 3.0 อีกด้วย
จุดเด่นของ version ใหม่ๆ คือจะสนับสนุนการพัฒนา desktop application ใน Windows AI Machine Learning
และการประยุกต์ใช้งานด้าน IoT (Internet of Things)
ที่เห็นในภาพคือตารางแสดง version ทั้งหมดของ .NET Standard และ platform ที่มันสนับสนุน
วิธีอ่านตารางนี้ คือ ในแต่ละคอลัมภ์ หรือ แนวตั้ง ของตารางคือ .NET Standard แต่ละ version
ส่วนแถวต่าง ๆ ของตารางจะเป็น .NET ชนิดต่าง ๆ จะเห็นว่ามี platform ต่าง ๆ อยู่ทั้งหมด 12 แบบ และมี version ต่าง ๆ 8 version
เลขที่เห็นในแต่ละ cell ทำหน้าที่ระบุ version ขั้นต่ำสุดที่ท่านจำเป็นต้องใช้เพื่อจะให้ทำงานได้ใน .NET Standard
ยกตัวอย่าง เช่น
หากท่านต้องการพัฒนา windows desktop application (win form)
เพื่อให้ทำงานได้กับ .NET Standard 1.4
ท่านจะต้องใช้ .NET Framework version 4.6.1
แต่ถ้าท่านต้องการให้ทำงานได้กับ .NET Standard 2.0
ท่านจะต้องใช้ .NET Framework แบบที่มี .NET Core 2.0 SDK version 4.6.1 เป็นต้น
วิธีหาว่าท่านจะสามารถใช้ .NET Standard Version สูงสุดได้แค่ไหนทำได้ดังนี้
-
หาแถวที่ตรงกับชนิด platform ที่ท่านต้องการให้โปรแกรมทำงานได้ เช่น ยกตัวอย่างเช่น .NET Framework (with .NET Core 1.x SDK)
-
มองหาคอลัมน์ที่ตรงกับ version ของ Framework ที่ใช้ใน application ของท่าน
-
มองที่บรรทัดแรกในคอลัมน์นั้น ท่านจะเห็นว่าท่านต้องใช้ .NET Standard version เท่าใดเป็นอย่างต่ำ (ใช้สูงกว่านั้นได้ไม่เป็นไร)
ตารางนี้ทำให้เรารู้ว่าถ้าต้องการให้ application ของเราทำงานได้ในทุก ๆ platform
เราจะต้องเลือก .NET Standard version ต่ำสุด (คือ 1.0)
และตารางนี้ทำให้เราเห็นแนวโน้มว่า platform ที่จะหมดความสำคัญลงไปเรื่อย ๆ
คือ Windows 8 , Windows Phone , Windows Phone Silverlight และ.NET Framework แบบที่ไม่มี .NET Core 2.0 SDK
โลก OpenSource
.NET Core และเทคโนโลยีรอบข้างเป็นมาตรฐานเปิด และเปิดเผย source code ทั้งหมดให้แก่นักพัฒนา
ครั้งหนึ่งนานมาแล้วโลกของการพัฒนาซอฟต์แวร์แบ่งออกเป็น 2 ฝ่าย
ฝ่ายแรก คือ กลุ่มนักพัฒนาที่ใช้เทคโนโลยีของไมโครซอฟท์ พัฒนาซอฟต์แวร์ที่ทำงานได้เฉพาะในระบบปฏิบัติการ Windows ภาษาที่ใช้คือ C++ ,VB และ C# (และอื่น ๆ)
Framework ที่ใช้คือ .NET Framework ASP.NET (และอื่น ๆ) ทั้งหมดนี้เป็นเทคโนโลยีปิด ไม่เคยมีใครได้เห็น source code หรือได้รู้เบื้องลึกในการออกแบบสร้าง โดยเฉพาะอย่างยิ่งตัวระบบปฏิบัติการ Windows ที่เปลี่ยนรุ่นไปเรื่อย ๆ ทุก ๆ 2-3 ปี source code ของมันถือว่าเป็นความลับอย่างยิ่งของบริษัทไมโครซอฟท์
คนซอฟต์แวร์อีกฝ่ายหนึ่ง คือ กลุ่ม OpenSource เป็นกลุ่มนักพัฒนาที่ไม่ใช้เทคโนโลยีของไมโครซอฟท์ และไม่ใช้เทคโนโลยีปิดของบริษัทซอฟต์แวร์อื่น ๆ ด้วย (เช่น oracle , adobe ,IBM ฯลฯ)
คนกลุ่มนี้จะใช้และพัฒนาเฉพาะซอฟต์แวร์ที่เปิดเผย Source Code เท่านั้น โดยจะเขียนโปรแกรมด้วยภาษาที่เป็นมาตรฐานเปิด หรือ OpenSource ตัว complier อาทิ C , C++ , JAVA ,PHP,Python และ Perl และพัฒนาบนซอฟต์แวร์ Framework เป็น OpenSource ส เช่น Bootstrap , Angular , Rails ,Apache และอื่น ๆ
ซอฟต์แวร์เหล่านี้เน้นให้ทำงานในระบบปฏิบัติการที่เป็น OpenSource คือ Linux Distro ต่าง ๆ เช่น Red Hat Ubuntu CentOS Debian และ openSUSE
ซอฟต์แวร์ที่พัฒนาโดยคนกลุ่มนี้จะถูกนำไปใส่ไว้ในเว็บไซต์ที่เป็นแหล่งเผยแพร่โค้ดอย่าง GitHub หรือ FTP Server เพื่อให้คนในกลุ่มเดียวกันนำไปใช้งานหรือพัฒนาต่อยอดได้ฟรี
ในยุคนั้นคนพัฒนา และ ซอฟต์แวร์กลุ่มมาตรฐานปิดและ กลุ่มเปิดเผย SourceCode ถือเป็นคน ๆ ละกลุ่มกันโดยสิ้นเชิง
บริษัทไมโครซอฟท์ภายใต้การนำของหัวหน้าคณะบริหาร สตีฟ บัลเมอร์ ยึดถือนโยบาย “หลายภาษาหลาย Framework ระบบปฏิบัติการเดียว”
ซึ่งเกิดจากแนวคิดว่าระบบปฏิบัติการ Windows เป็นสินค้าหลักและเป็นศูนย์กลางของระบบนิเวศ
จึงมุ่งให้ภาษาและ Framework ทั้งหมดทำงานภายใต้ Windows เท่านั้น ไม่ต้องการให้ทำงานได้ในระบบปฏิบัติการอื่นด้วย
ขณะที่ภาษา OpenSource บางภาษาอย่าง Java และ Framework ของมันยึดถือนโยบายตรงกันข้ามคือ “ภาษาเดียว Framework เดียว หลายระบบปฏิบัติการ”
Microsoft รัก Linux
ผลจากการที่ภาษาและ Framework จากบริษัทไมโครซอฟท์มีอยู่เฉพาะในระบบปฏิบัติการ Windows
ขณะที่ภาษาและ Framework ที่เป็น OpenSource ส่วนใหญ่ (อาทิ ruby on rails , CakePHP , Python Django ฯลฯ) มีอยู่ทั้งใน Linux และ Microsoft Windows ทำให้ภาษาและ Framework จากบริษัทไมโครซอฟท์มีความแพร่หลายน้อยกว่าภาษาและ Framework กลุ่ม OpenSource และดูเหมือนว่าช่องว่างนี้จะห่างมากขึ้นทุกวันจน สตีฟ บัลเมอร์ ถึงกับกล่าวว่า “Linux คือ มะเร็งร้าย”
เมื่อยุคสมัยผ่านไปบริษัทไมโครซอฟท์ภายใต้การนำของหัวหน้าคณะบริหารคนใหม่คือ สัตยา นาเดลลา ระบบปฏิบัติการวินโดว์สไม่ใช่สิ้นค้าทำเงินที่เป็นหลักของบริษัทอีกต่อไป
สินค้าทำเงินที่เป็นหลักของบริษัทไมโครซอฟท์คือ Microsoft Azure ซึ่งเป็นการให้บริการใน Cloud
นั่นแปลว่า ไมโครซอฟท์ไม่ใช่บริษัทระบบปฏิบัติการอีกต่อไป แต่เป็นบริษัทผู้ให้บริการ Cloud
ดังนั้นอะไรก็ตามที่จะทำให้แอร์เชอร์ได้รับความนิยมจึงถือเป็นสิ่งที่ต้องให้ความสำคัญในลำดับแรก
จากการสำรวจไมโครซอฟท์พบว่าลูกค้า Azure นอกจากจะใช้ระบบปฏิบัติการ windows แล้วยังมีจำนวนมากที่ใช้ Linux ด้วย
นี่เป็นสาเหตุหลักที่ทำให้บริษัทไมโครซอฟท์เข้าร่วมทีม Linux Foundation คือ องค์กรส่งเสริมและพัฒนา OpenSource เมื่อปี 2016
จากนั้นไมโครซอฟท์ก็เริ่มผลักดันโครงการต่าง ๆ ของบริษัทให้เป็น OpenSource
โดยมีเป้าหมายเพื่อให้นักพัฒนา และ ผู้ใช้ทุกกลุ่มได้รับประโยชน์จากการใช้งาน Azure มากที่สุด
การทุ่มเทให้แก่วงการ open source ของไมโครซอฟท์ถือว่าไม่ใช่เล็กน้อย
แต่เป็นการกระทำในระดับที่ทำให้ไมโครซอฟท์กลายเป็นหนึ่งในตัวตั้งตัวตีด้าน open source รายใหญ่ที่สุดในโลก
มีโครงการ open source หลายพันโครงการ และ ยังมีเพิ่มขึ้นอีกเรื่อย ๆ
โดยเริ่มจากโครงการแรกในปี 2004 คือ Wix Toolset ซึ่งเป็นเครื่องมือ complie link และตัวจัดการ Library
พอถึงปี 2012 ไมโครซอฟท์ก็กลายเป็นผู้ทุ่มเทรายใหญ่สุดของการทำส่วน “kernel” ของระบบปฏิบัติการ Linus โดยเข้าพัฒนาในแง่มุมต่าง ๆ เช่น การทำให้ใช้งานร่วมกับ Hyper-V ได้อย่างราบรื่น
ไมโครซอฟท์ยังร่วมมือกับผู้ค้า Linux รายหลักอย่าง Red Hat และ Suse
เพื่อทำให้แน่ใจว่า ระบบปฏิบัติการจากบริษัทเหล่านี้จะสามารถทำงานร่วมกับ Azure ได้อย่างราบรื่น
ทำไมต้อง Open Source
ไมโครซอฟท์ทุ่มสุดตัวไปในโลก open source มีพนักงานจำนวนหนึ่งหมื่นห้าพันคนที่แชร์โค้ดใน GitHub
มีพนักงานหกพันคนที่ร่วมในโครงการ open source ซึ่งปล่อยโค้ด 3000 โครงการ
และ มีซอฟต์แวร์ component เกือบหมื่นรายการที่เป็น open source
และกำลังเปิด Github repo ซึ่งเป็น หน่วยเก็บซอฟต์แวร์ open source สำหรับควบคุม source code ที่เปิดต่อสาธารณะ
สำหรับโอเพ่นซอร์สตัวระบบปฏิบัติการ windows โดยทีมวิศวกรสี่พันคน
โครงการนี้มีไฟล์ไม่ต่ำกว่าสามล้านห้าแสนไฟล์ ทำให้มันเป็น Github repo ที่มีขนาดใหญ่ที่สุดใสโลก
เป็นโครงการ open source ที่มีความเคลื่อนไหวอย่างมโหฬารอย่างที่ไม่เคยมีใครเห็นมาก่อน
และไมโครซอฟท์กำลังพัฒนาระบบปฏิบัติการ Linux version ใหม่ที่เป็น open source อีกด้วย
.NET Framework ทุกแบบ ทุก version ก็กลายเป็นโครงการ open source แล้ว
คำถามคืออะไรเป็นสาเหตุที่ไมโครซอฟท์ต้อง open source framework เหล่านี้
คำตอบคือ “เพื่อการทำงานข้าม platform”
ในปัจจุบันนี้มี platform หลัก อยู่ 4 platform คือ Windows , Linux , macOS และ android
นักพัฒนาต้องการพัฒนา application ให้มีในทั้ง 4 แพลตฟอร์ม
จำเป็นจะต้องสร้างซอฟต์แวร์ที่มีหน้าตาและการทำงานเหมือนกัน 4 แบบนับว่าเป็นเรื่องเสียเวลาและยุ่งยาก
เป้าหมายของไมโครซอฟท์ คือ ต้องการให้นักพัฒนาสร้าง application เพียงครั้งเดียวสามารถนำไปใช้งานได้ในทุก ๆ platform
วิธีที่จะให้สิ่งนี้เกิดขึ้นได้ดีที่สุดคือการ open source ทั้งตัวภาษา ชุดเครื่องมือ และ Framework
ระบบนิเวศที่เข้มแข็ง
ไมโครซอฟท์ออกซอฟต์แวร์และ component ที่เกี่ยวข้องโดยมี version ใหม่ ๆ ออกมาถี่ยิบ อำนวยความสะดวกให้นักพัฒนาติดตั้งได้ง่าย ๆ ใน visual studio ผ่านทาง NuGet ซึ่งเป็นเครื่องมือจัดการเพ็กเกจในที่เก็บออนไลน์
เพราะต้องการความเห็นที่ป้อนกลับมาจากผู้ใช้อย่างถี่ ๆ เพื่อนำไปแก้ไปปรับปรุงเป็นเวอร์ชั่นใหม่ออกมาให้ลองใช้อีกบ่อย ๆ ตามหลักการ agile ซึ่งเป็นหลักบริหารโครงการซอฟต์แวร์ที่ใช้วิธีปรับการออกแบบอย่างถี่โดยแบ่งงานออกเป็นช่วงสั้น ๆ หลาย ๆ ช่วง
การทำซอฟต์แวร์ด้วยหลักการ agile อย่างให้ได้ผลที่ดีที่สุด คือ ต้องเปิด source เพราะสาธารณชนจะเห็นการเปลี่ยนแปลงโค้ดอะไรก็ตามในขณะนั้นและนำไปใช้งานได้ทันที
วิศวกรซอฟต์แวร์ของไมโครซอฟท์เปิดเผยเอกสารภายในที่อธิบายว่าระบบทำงานอย่างไรและบอกตำแหน่งที่แก้ไขครั้งสุดท้ายว่าอยู่ตรงไหนและแก้ไขอย่างไร และคอยถกกับนักพัฒนาผ่านทาง twitter และ stack overflow อยู่ตลอดเวลา
การ open source ทำให้ไมโครซอฟท์มีปฏิสัมพันธ์กับนักพัฒนาได้อย่างรวดเร็วเดี๋ยวนั้น อาจไม่ใช่นักพัฒนาทุกคนที่อยากจะทำแบบนั้น
แต่สำหรับพวกที่ทำ จะช่วยให้เกิดการป้อนกลับที่ทำให้การปรับปรุงแก้ไขซอฟต์แวร์เป็นไปได้อย่างรวดเร็วและมีประสิทธิภาพกว่าการปิด source
เมื่อซอฟต์แวร์ .NET เป็น Open source ทั้งหมดทำให้ระบบนิเวศของมันได้รับการปรับปรุงพัฒนาอย่างรวดเร็วและมีสเถียรภาพมากขึ้น