กลับไปหน้าบทความ

อ่าน 20 นาที

โมโน (ซอฟต์แวร์)

Mono เป็น เฟรมเวิร์กซอฟต์แวร์โอ เพนซอร์สฟรี ที่มีจุดมุ่งหมายเพื่อเรียกใช้ซอฟต์แวร์ที่สร้างขึ้นสำหรับ .

โมโน (ซอฟต์แวร์)

โมโน
ผู้เขียนต้นฉบับซีเหมิน
นักพัฒนาไวน์เอชดับบลิว
ปล่อย30 มิถุนายน 2547 ( 30 มิถุนายน 2547 )
เวอร์ชันเสถียร
6.12.0.206 / 13 กุมภาพันธ์ 2024 [ 1 ] ( 13 กุมภาพันธ์ 2024 )
เขียนเป็นC , C# , XML
ระบบปฏิบัติการWindows , macOS , Linux , IBM AIX , IBM i [ 2 ]
แพลตฟอร์มIA-32 , x64 , IA-64 , ARM , MIPS , RISC-V , PowerPC , SPARC , S390
พิมพ์เฟรมเวิร์กซอฟต์แวร์
ใบอนุญาตใบอนุญาต MIT [ 3 ]
เว็บไซต์www.mono-project.com
ที่เก็บข้อมูล
  • gitlab.winehq.org/mono/mono

Monoเป็นเฟรมเวิร์กซอฟต์แวร์โอเพนซอร์สฟรี ที่มีจุดมุ่งหมายเพื่อเรียกใช้ซอฟต์แวร์ที่สร้างขึ้นสำหรับ . NET FrameworkบนLinuxและระบบปฏิบัติการอื่นๆ เดิมทีพัฒนาโดยXimianซึ่งต่อมาถูกซื้อกิจการโดยNovell ต่อมาได้ รับการพัฒนาโดยXamarinซึ่งต่อมาถูกซื้อกิจการโดยMicrosoft [ 4 ]ในเดือนสิงหาคม 2024 Microsoft ได้โอนกรรมสิทธิ์ของ Mono ให้กับWineHQ [ 5 ]

ประวัติศาสตร์

บูธ Mono ในงาน OSCON 2009ที่เมืองซานโฮเซ รัฐแคลิฟอร์เนีย

เมื่อ Microsoft ประกาศ.NET Framework ครั้งแรก ในเดือนมิถุนายน พ.ศ. 2543 ได้มีการอธิบายว่าเป็น "แพลตฟอร์มใหม่ที่อิงตามมาตรฐานอินเทอร์เน็ต" [ 6 ] และในเดือนธันวาคมของปีนั้น Common Language Infrastructureพื้นฐานได้รับการเผยแพร่เป็นมาตรฐานเปิด "ECMA-335" [ 7 ]ซึ่งเปิดโอกาสให้มีการใช้งานที่เป็นอิสระ[ 8 ] Miguel de IcazaจากXimianเชื่อว่า .NET มีศักยภาพที่จะเพิ่มประสิทธิภาพการทำงานของโปรแกรมเมอร์ และเริ่มตรวจสอบว่าเวอร์ชัน Linux เป็นไปได้หรือไม่[ 9 ]เมื่อตระหนักว่าทีมเล็กๆ ของพวกเขาไม่สามารถคาดหวังที่จะสร้างและสนับสนุนผลิตภัณฑ์เต็มรูปแบบได้ พวกเขาจึงเปิดตัวโครงการโอเพนซอร์ส Mono ในวันที่ 19 กรกฎาคม พ.ศ. 2544 ในการประชุม O'Reilly

หลังจากพัฒนามาสามปี Mono 1.0 ก็ได้เปิดตัวเมื่อวันที่ 30 มิถุนายน พ.ศ. 2547 [ 10 ] Mono ได้พัฒนาจากจุดเน้นเริ่มต้นที่แพลตฟอร์มสำหรับนักพัฒนาแอปพลิเคชันเดสก์ท็อป Linux ไปสู่การสนับสนุนสถาปัตยกรรมและระบบปฏิบัติการที่หลากหลาย รวมถึงระบบฝังตัว[ 11 ]

Novellเข้าซื้อกิจการ Ximian ในปี 2546 หลังจากที่ Novell ถูกAttachmate เข้าซื้อกิจการ ในเดือนเมษายน 2554 Attachmate ได้ประกาศปลดพนักงานของ Novell หลายร้อยคน[ 12 ]ซึ่งทำให้เกิดข้อสงสัยเกี่ยวกับอนาคตของ Mono [ 13 ] [ 14 ]

เมื่อวันที่ 16 พฤษภาคม 2554 Miguel de Icaza ประกาศในบล็อกของเขาว่า Mono จะยังคงได้รับการสนับสนุนจากXamarin ซึ่งเป็นบริษัทที่เขาก่อตั้งขึ้นหลังจากถูกเลิกจ้างจาก Novell ทีมงาน Mono ดั้งเดิมก็ได้ย้ายไปอยู่กับบริษัทใหม่เช่นกัน Xamarin วางแผนที่จะทำงานต่อใน Mono และวางแผนที่จะเขียนสแต็ก .NET ที่เป็นกรรมสิทธิ์สำหรับiOSและAndroidใหม่ทั้งหมด เนื่องจาก Novell ยังคงเป็นเจ้าของ MonoTouch และ Mono สำหรับ Android ในขณะนั้น[ 15 ]หลังจากการประกาศนี้ อนาคตของโครงการก็ถูกตั้งคำถาม เนื่องจาก MonoTouch และ Mono สำหรับ Android กำลังแข่งขันโดยตรงกับผลิตภัณฑ์เชิงพาณิชย์ที่มีอยู่ซึ่งปัจจุบันเป็นของAttachmateและเมื่อพิจารณาว่าทีม Xamarin จะมีปัญหาในการพิสูจน์ว่าพวกเขาไม่ได้ใช้เทคโนโลยีที่พวกเขาพัฒนาขึ้นก่อนหน้านี้ในขณะที่พวกเขาทำงานให้กับNovellสำหรับงานเดียวกัน[ 16 ]อย่างไรก็ตาม ในเดือนกรกฎาคม พ.ศ. 2554 Novell ซึ่งปัจจุบันเป็นบริษัทในเครือของ Attachmate และ Xamarin ได้ประกาศว่าได้มอบใบอนุญาตถาวรให้กับ Xamarin สำหรับ Mono, MonoTouch และ Mono สำหรับ Android ซึ่งรับหน้าที่ดูแลโครงการอย่างเป็นทางการ[ 17 ] [ 18 ]

เมื่อวันที่ 24 กุมภาพันธ์ พ.ศ. 2559 ไมโครซอฟต์ประกาศว่าได้ลงนามในข้อตกลงขั้นสุดท้ายเพื่อเข้าซื้อกิจการ Xamarin [ 19 ]

เมื่อวันที่ 27 สิงหาคม พ.ศ. 2567 ไมโครซอฟต์ได้โอนกรรมสิทธิ์ของ Mono ให้กับ WineHQ ซึ่งเป็นทีมพัฒนาWineซึ่งเป็นเลเยอร์ความเข้ากันได้ของ Windows [ 5 ]

สถานะปัจจุบันและแผนงาน

เวอร์ชันปัจจุบันของ Mono คือ 6.12.0 (ณ เดือนมิถุนายน 2024) เวอร์ชันนี้มีAPI หลัก ของ.NET Frameworkและรองรับ Visual Basic.NET และ C# 7.0 LINQ to Objects , XML และSQLเป็นส่วนหนึ่งของการแจกจ่ายWindows Forms 2.0 ก็ได้รับการสนับสนุนเช่นกัน แต่ไม่ได้มีการพัฒนาอย่างต่อเนื่อง ดังนั้นการสนับสนุนบน Mono จึงไม่สมบูรณ์[ 20 ]เวอร์ชัน 4.0 เป็นเวอร์ชันแรกที่รวมเอาซอร์สโค้ดดั้งเดิมของ Microsoft ที่เผยแพร่โดย Microsoft เป็นส่วนหนึ่งของโครงการ . NET Core

ณ วันที่ 14 มกราคม 2021 Mono รองรับฟีเจอร์ทั้งหมดใน .NET 4.7 ยกเว้นWindows Presentation Foundation (WPF) (ซึ่งทีม Mono ไม่ได้วางแผนที่จะรองรับเนื่องจากต้องใช้ความพยายามอย่างมาก) [ 20 ]และWindows Workflow Foundation (WF) และรองรับWindows Communication Foundation (WCF) และ ASP.NET async stack อย่างจำกัดเท่านั้น อย่างไรก็ตาม System.Web และ WCF เป็นตัวเลือกสำหรับการพอร์ตจากซอร์สโค้ดอ้างอิง .NET กลับมายัง Mono ใน 'เกือบจะในทันที' [ 21 ] บางส่วนที่ขาดหายไปของ.NET Frameworkกำลังอยู่ระหว่างการพัฒนาในโครงการย่อย Mono ทดลองที่เรียกว่าOlive [ 22 ]

โครงการ Mono ยังได้สร้างคอม ไพเลอร์ Visual Basic .NETและรันไทม์ที่ออกแบบมาเพื่อเรียกใช้แอปพลิเคชัน VB.NET ปัจจุบันโครงการนี้กำลังได้รับการพัฒนาโดย Rolf Bjarne Kvinge

แสงจันทร์

การใช้งานโอเพนซอร์สของMicrosoft Silverlightที่เรียกว่าMoonlightได้ถูกรวมไว้ตั้งแต่ Mono 1.9 [ 23 ] Moonlight 1.0 ซึ่งรองรับ API ของ Silverlight 1.0 ได้รับการเผยแพร่เมื่อวันที่ 20 มกราคม 2009 Moonlight 2.0 รองรับ Silverlight 2.0 และคุณสมบัติบางอย่างของ Silverlight 3.0 [ 24 ]การเปิดตัวเวอร์ชันพรีวิวของ Moonlight 3.0 ได้รับการประกาศในเดือนกุมภาพันธ์ 2010 และมีการอัปเดตเพื่อรองรับ Silverlight 3 [ 25 ]

โครงการ Moonlight ถูกยกเลิกเมื่อวันที่ 29 พฤษภาคม 2555 [ 26 ]ตามที่มิเกลกล่าว ปัจจัยสองประการที่ทำให้โครงการนี้ต้องยุติลงคือ ไมโครซอฟต์ได้เพิ่ม "ข้อจำกัดเทียม" ที่ "ทำให้ไม่สามารถใช้งานได้สำหรับการเขียนโปรแกรมบนเดสก์ท็อป" และเทคโนโลยีนี้ยังไม่ได้รับความนิยมมากพอในเว็บ นอกจากนี้ ไมโครซอฟต์เองก็ได้ยกเลิกการใช้งาน Silverlight ไปแล้วตั้งแต่ปี 2555

ส่วนประกอบโมโน

Mono ประกอบด้วยส่วนประกอบสามกลุ่ม:

  1. ส่วนประกอบหลัก
  2. ชุดเครื่องมือพัฒนา Mono/Linux/GNOME
  3. ชุดความเข้ากันได้ของ Microsoft

ส่วนประกอบหลักประกอบด้วยคอมไพเลอร์ C#, เครื่องเสมือนสำหรับโครงสร้างพื้นฐานภาษาทั่วไปและไลบรารีคลาสหลัก ส่วนประกอบเหล่านี้อิงตามมาตรฐาน Ecma-334 และ Ecma-335 [ 27 ] ทำให้ Mono สามารถให้บริการ เครื่องเสมือน CLI ที่สอดคล้องกับมาตรฐาน ฟรี และโอเพนซอร์สได้Microsoftได้ออกแถลงการณ์ที่ครอบคลุมทั้งสองมาตรฐานภายใต้ใบอนุญาต Community Promiseของ พวกเขา [ 28 ]

ชุดเครื่องมือพัฒนา Mono/Linux/GNOMEมีเครื่องมือสำหรับการพัฒนาแอปพลิเคชันโดยใช้ไลบรารีGNOMEและโอเพนซอร์สที่มีอยู่ ซึ่งรวมถึง: Gtk#สำหรับ การพัฒนา ส่วนติดต่อผู้ใช้แบบกราฟิก (GUI), ไลบรารี Mozilla สำหรับการทำงานกับเอ็นจิ้นการเรนเดอร์ Gecko , ไลบรารีการรวมระบบ Unix (Mono.Posix), ไลบรารีการเชื่อมต่อฐานข้อมูล, ชุดเครื่องมือรักษาความปลอดภัย และภาษา XML schema RelaxNG Gtk# ช่วยให้แอปพลิเคชัน Mono สามารถรวมเข้ากับเดสก์ท็อป Gnome ได้เหมือนแอปพลิเคชันดั้งเดิม ไลบรารีฐานข้อมูลให้การเชื่อมต่อกับฐานข้อมูลเชิงวัตถุสัมพันธ์db4o , Firebird , Microsoft SQL Server (MSSQL), MySQL , Open Database Connectivity (ODBC), Oracle , PostgreSQL , SQLiteและอื่นๆ อีกมากมาย โครงการ Mono ติดตามการพัฒนาส่วนประกอบฐานข้อมูลบนเว็บไซต์[ 29 ]

ชุดส่วนประกอบความเข้ากันได้ของ Microsoftเป็นช่องทางสำหรับการพอร์ตแอปพลิเคชัน Windows .NET ไปยังLinuxกลุ่มส่วนประกอบนี้ประกอบด้วยADO.NET , ASP.NETและWindows Forms (รวมถึง libgdiplus) และอื่นๆ อีกมากมาย เนื่องจากส่วนประกอบเหล่านี้ไม่ได้อยู่ภายใต้ มาตรฐาน Ecmaบางส่วนจึงยังคงมีความเสี่ยงและข้อกังวลเกี่ยวกับสิทธิบัตรอยู่

สถาปัตยกรรมเฟรมเวิร์ก

ส่วนประกอบหลักของ Mono ได้แก่:

เอ็นจิ้นการประมวลผลโค้ด

รันไทม์ Mono ประกอบด้วยเอนจินประมวลผลโค้ดที่แปลงไบต์โค้ด ECMA CILเป็นโค้ดเนทีฟ และรองรับโปรเซสเซอร์หลายประเภท ได้แก่ARM , MIPS (เฉพาะโหมด 32 บิต), SPARC , PowerPC , z/Architecture , IA-32 , x86-64และIA-64สำหรับโหมด 64 บิต

ตัวสร้างโค้ดสามารถใช้งานได้ในสามโหมด:

  • การคอมไพล์แบบทันเวลา (JIT): รันไทม์จะแปลงไบต์โค้ด ECMA CIL ให้เป็นโค้ดเนทีฟขณะที่โค้ดทำงาน
  • การคอมไพล์ล่วงหน้า (Ahead-of-Time: AOT): โค้ดนี้จะแปลงไบต์โค้ด ECMA CIL (โดยทั่วไปจะพบในไฟล์ .exe หรือ .dll) และสร้างโค้ดเนทีฟที่จัดเก็บไว้ในไฟล์เฉพาะระบบปฏิบัติการ สถาปัตยกรรม และซีพียู (สำหรับไฟล์ foo.exe จะสร้างไฟล์ foo.exe.so บน Linux) โหมดการทำงานนี้จะคอมไพล์โค้ดส่วนใหญ่ที่โดยทั่วไปจะทำงานในขณะรันไทม์ อย่างไรก็ตาม มีข้อยกเว้นบางประการ เช่นtrampolinesและโค้ดการจัดการอื่นๆ ที่ยังคงต้องการ JIT ในการทำงาน ดังนั้นอิมเมจ AOT จึงไม่ใช่แบบสแตนด์อโลนโดยสมบูรณ์
  • การคอมไพล์แบบสแตติกเต็มรูปแบบ: โหมดนี้รองรับเฉพาะบนแพลตฟอร์มบางแพลตฟอร์มเท่านั้น และเป็นการพัฒนาต่อยอดจากกระบวนการคอมไพล์ล่วงหน้า (Ahead-of-Time) โดยสร้างแทรมโพลีนแรปเปอร์และพร็อกซีที่จำเป็นทั้งหมดลงในไฟล์สแตติก ซึ่งสามารถเชื่อมโยงแบบสแตติกเข้ากับโปรแกรมได้ และไม่จำเป็นต้องใช้ JIT ในระหว่างการทำงาน โหมดนี้ใช้ในระบบปฏิบัติการiOS ของ Apple , PlayStation 3ของ Sony และ Xbox 360ของ Microsoft

ตั้งแต่ Mono เวอร์ชัน 2.6 เป็นต้นไป สามารถตั้งค่า Mono ให้ใช้LLVMเป็นกลไกสร้างโค้ดแทนกลไกสร้างโค้ดของ Mono เองได้ ซึ่งมีประโยชน์สำหรับงานประมวลผลประสิทธิภาพสูงและสถานการณ์อื่นๆ ที่ประสิทธิภาพการทำงานมีความสำคัญมากกว่าประสิทธิภาพการเริ่มต้นระบบ

ตั้งแต่ Mono เวอร์ชันพรีวิว 2.7 เป็นต้นไป ไม่จำเป็นต้องเลือกเอ็นจิ้นการสร้างโค้ดตัวใดตัวหนึ่งในระหว่างการตั้งค่าอีกต่อไป สามารถเลือกเอ็นจิ้นการสร้างโค้ดได้ในระหว่างการเริ่มต้นระบบโดยใช้พารามิเตอร์--llvmบรรทัด--nollvmคำสั่ง และโดยค่าเริ่มต้นจะใช้เอ็นจิ้นการสร้างโค้ด Mono ที่เริ่มต้นได้เร็วที่สุด

ตั้งแต่ Mono 5.18 เป็นต้นไป การสนับสนุน LLVM เป็นตัวเลือกการกำหนดค่าเริ่มต้น เวอร์ชันก่อนหน้าต้องใช้ LLVM fork พิเศษ แต่ตอนนี้ Mono สามารถย้อนกลับไปใช้ตัวสร้างโค้ดของตัวเองได้เมื่อพบสิ่งที่ LLVM จัดการไม่ได้[ 30 ]

คนเก็บขยะ

ตั้งแต่ Mono เวอร์ชัน 2.8 รันไทม์ของ Mono มาพร้อมกับตัวเก็บขยะ สองตัว ได้แก่ ตัวเก็บขยะแบบแบ่งรุ่น และตัวเก็บขยะแบบอนุรักษ์นิยมของ Boehm–Demers–Weiserตัวเก็บขยะของ Boehm อาจแสดงการรั่วไหลของหน่วยความจำในแอปพลิเคชันบางประเภท ทำให้ไม่เหมาะสำหรับแอปพลิเคชันเซิร์ฟเวอร์ที่ทำงานเป็นเวลานาน[ 31 ] [ 32 ] Mono เปลี่ยนไปใช้Simple Generational GC (SGen-GC) เป็นตัวเก็บขยะเริ่มต้นในเวอร์ชัน 3.1.1

ตัวเก็บขยะ SGen มีข้อดีหลายประการเหนือสแกนเนอร์แบบดั้งเดิม มันใช้การเก็บขยะแบบแบ่งรุ่นโดยวัตถุใหม่จะถูกจัดสรรจากเนอริสทรี ในระหว่างรอบการเก็บขยะ วัตถุทั้งหมดที่รอดจะถูกย้ายไปยังพูลหน่วยความจำรุ่นเก่า แนวคิดก็คือ วัตถุจำนวนมากเป็นแบบชั่วคราวและสามารถเก็บกวาดได้อย่างรวดเร็ว และมีเพียงไม่กี่วัตถุเท่านั้นที่เป็นวัตถุระยะยาวซึ่งมีชีวิตอยู่ตลอดอายุการใช้งานของแอปพลิเคชัน เพื่อปรับปรุงประสิทธิภาพ ตัวเก็บขยะนี้จะกำหนดพูลหน่วยความจำให้กับแต่ละเธรด เพื่อให้เธรดสามารถจัดสรรบล็อกหน่วยความจำใหม่ได้โดยไม่ต้องประสานงานกับเธรดอื่น การย้ายวัตถุจากเนอริสทรีไปยังรุ่นเก่าทำได้โดยการคัดลอกข้อมูลจากเนอริสทรีไปยังพูลรุ่นเก่า และอัปเดตพอยเตอร์ที่มีชีวิตใดๆ ที่ชี้ไปยังข้อมูลให้ชี้ไปยังตำแหน่งใหม่ วิธีนี้อาจมีค่าใช้จ่ายสูงสำหรับวัตถุขนาดใหญ่ ดังนั้น SGen ของ Mono จึงใช้พูลหน่วยความจำแยกต่างหากสำหรับวัตถุขนาดใหญ่ (ส่วนวัตถุขนาดใหญ่) และใช้อัลกอริทึมแบบ mark-and-sweep สำหรับวัตถุเหล่านั้น[ 31 ]

ห้องสมุดประจำชั้นเรียน

ไลบรารีคลาสมีชุดสิ่งอำนวยความสะดวกที่ครอบคลุมสำหรับการพัฒนาแอปพลิเคชัน โดยส่วนใหญ่เขียนด้วยภาษา C# แต่เนื่องจากข้อกำหนดภาษาทั่วไป จึงสามารถใช้งานได้กับภาษา .NET ใดๆ ก็ได้ ไลบรารีคลาสมีโครงสร้างเป็นเนมสเปซ และใช้งานในไลบรารีที่ใช้ร่วมกันที่เรียกว่าแอสเซมบลี การกล่าวถึง .NET Framework นั้นส่วนใหญ่หมายถึงไลบรารีคลาสนี้[ 33 ]

เนมสเปซและแอสเซมบลี

เนมสเปซเป็นกลไกในการจัดกลุ่มคลาสที่คล้ายคลึงกันอย่างมีตรรกะเข้าไว้ในโครงสร้างแบบลำดับชั้น เพื่อป้องกันความขัดแย้งในการตั้งชื่อ โครงสร้างนี้ใช้คำที่คั่นด้วยจุด โดยเนมสเปซระดับบนสุดที่พบบ่อยที่สุดคือ System เช่น System.IO และ System.Net นอกจากนี้ยังมีเนมสเปซระดับบนสุดอื่นๆ อีก เช่น Accessibility และ Windows ผู้ใช้สามารถกำหนดเนมสเปซได้โดยการวางองค์ประกอบต่างๆ ไว้ภายในบล็อกเนมสเปซ

แอสเซมบลีคือรูปแบบการบรรจุทางกายภาพของไลบรารีคลาส ไฟล์เหล่านี้เป็นไฟล์ .dll เหมือนกับ (แต่ไม่ควรสับสนกับ) ไลบรารีที่ใช้ร่วมกันของ Win32 ตัวอย่างของแอสเซมบลีได้แก่ mscorlib.dll, System.dll, System.Data.dll และ Accessibility.dll เนมสเปซมักจะกระจายอยู่ระหว่างหลายแอสเซมบลี และหนึ่งแอสเซมบลีอาจประกอบด้วยไฟล์หลายไฟล์

โครงสร้างพื้นฐานภาษาทั่วไปและข้อกำหนดภาษาทั่วไป

โครงสร้างพื้นฐานภาษาทั่วไป (CLI)ตามที่ดำเนินการโดยรันไทม์ภาษาทั่วไป (CLR)นั้นถูกดำเนินการโดยไฟล์ปฏิบัติการ Mono รันไทม์จะคอมไพล์และเรียกใช้แอปพลิเคชัน .NET โครงสร้างพื้นฐานภาษาทั่วไปถูกกำหนดโดยมาตรฐาน ECMA [ 27 ]ในการเรียกใช้แอปพลิเคชัน คุณต้องเรียกใช้รันไทม์ด้วยพารามิเตอร์ที่เกี่ยวข้อง

ข้อกำหนดภาษาทั่วไป (CLS) ระบุไว้ในบทที่ 6 ของ ECMA-335 และกำหนดอินเทอร์เฟซสำหรับ CLI เช่น ข้อกำหนดต่างๆ เช่น ประเภทพื้นฐานสำหรับ Enum คอมไพเลอร์ Mono สร้างอิมเมจที่สอดคล้องกับ CLS นี่คือภาษาระดับกลางทั่วไป (Common Intermediate Language) รันไทม์ของ Mono รับอิมเมจนี้และรันมัน มาตรฐาน ECMA กำหนดไลบรารีที่สอดคล้องกับ CLS อย่างเป็นทางการในฐานะเฟรมเวิร์ก

โค้ดที่จัดการได้และโค้ดที่จัดการไม่ได้

ในแอปพลิเคชัน .NET/Mono ดั้งเดิม โค้ดทั้งหมดจะถูกจัดการ (managed code ) กล่าวคือ โค้ดจะถูกควบคุมโดยรูปแบบการจัดการหน่วยความจำและความปลอดภัยของเธรดของ CLI แอปพลิเคชัน .NET หรือ Mono อื่นๆ สามารถใช้โค้ดแบบเดิม ซึ่งเรียกว่าโค้ดที่ไม่ได้รับการจัดการ (unmanaged code) โดยใช้ไลบรารี System.Runtime.InteropServices เพื่อสร้างการเชื่อมต่อกับภาษา C# ไลบรารีหลายตัวที่มาพร้อมกับ Mono ใช้คุณสมบัตินี้ของ CLI เช่นGtk #

นวัตกรรมเฉพาะด้าน

Mono ได้สร้างสรรค์นวัตกรรมในบางด้านด้วยส่วนขยายใหม่ๆ สำหรับข้อกำหนดหลักของ C# และ CLI:

  • คอมไพเลอร์ C# ในรูปแบบบริการ (ใช้คอมไพเลอร์ C# เป็นไลบรารี) [ 34 ]
  • C# Interactive Shell [ 35 ]
  • การสนับสนุนSIMD [ 36 ]เป็นส่วนหนึ่งของเนมสเปซ Mono.SIMD ซึ่งการเรียกใช้เมธอดไปยังประเภทเวกเตอร์พิเศษจะถูกแมปโดยตรงกับคำสั่ง SIMD ของ CPU โปรเซสเซอร์พื้นฐาน
  • การคอมไพล์โค้ด .NET แบบคงที่ทั้งหมด[ 37 ] (ใช้ใน Mono/iPhone, Mono/PS3)
  • โครูทีนโมโน(ใช้ในการใช้งานโค้ดไมโครเธรดดิ้งและคอนทินิวเอชันส่วนใหญ่สำหรับนักพัฒนาเกม) [ 38 ]
  • การฉีดการประกอบเข้าสู่กระบวนการที่มีชีวิต[ 39 ]
  • การใช้งานLLVMเป็นแบ็กเอนด์ JIT
  • Cxxi และCppSharpสามารถทำงานร่วมกับโค้ดและไลบรารี C++ ได้โดยตรง

นอกจากนี้ Mono ยังสามารถใช้งานได้บนระบบปฏิบัติการและสถาปัตยกรรมที่หลากหลาย[ 40 ]

ข้อกำหนดของระบบ

Windows 7, Windows 8, Windows 8.1, Windows 10, macOS หรือ Linux

มีหลายโครงการที่ต่อยอดจาก Mono และอนุญาตให้นักพัฒนาใช้งานในสภาพแวดล้อมการพัฒนาของตน โครงการเหล่านี้ได้แก่:

ใช้งานได้หลายแพลตฟอร์ม:

  • Banshee Media Player (หยุดพัฒนาแล้ว) เป็นโปรแกรมเล่นเพลงข้ามแพลตฟอร์มที่สร้างด้วย Mono และ Gtk# และยังเป็นไดรเวอร์สำหรับไลบรารีและโปรเจ็กต์ที่ใช้ C# อีกหลายสิบรายการสำหรับการจัดการสื่อ
  • Beagle (เลิกบำรุงรักษาแล้ว) ระบบค้นหาสำหรับระบบ Unix
  • Gecko#, ตัวเชื่อมต่อสำหรับการฝังเอ็นจิ้นการจัดวางเลย์เอาต์ที่ใช้ใน Mozilla ( Gecko )
  • Gtk# คือไลบรารี ที่เขียนด้วยภาษา C# เพื่อใช้งานไลบรารีGTKและ GNOME ที่อยู่เบื้องหลังโดยสามารถใช้งานได้บน Linux, MacOS และ Windows
  • Mono Migration Analyzer (MoMA)เป็นเครื่องมือที่ช่วยนักพัฒนา .NET บน Windows ในการค้นหาส่วนของโค้ดที่ไม่สามารถใช้งานได้ข้ามแพลตฟอร์ม และดังนั้นจึงใช้งานไม่ได้ใน Mono บน Linux และ Unix อื่นๆ ไม่มีการอัปเกรดตั้งแต่ Mono เวอร์ชัน 2.8 (2013) ควรใช้ .NET Portability Analyzer ของ Microsoft (dotnet-apiport) แทน
  • MonoCross คือรูปแบบการออกแบบ Model-View-Controller (MVC) แบบข้ามแพลตฟอร์มโดยที่ Model และ Controller จะใช้ร่วมกันในทุกแพลตฟอร์ม ในขณะที่ View จะมีลักษณะเฉพาะสำหรับแต่ละแพลตฟอร์ม เพื่อให้ได้ส่วนติดต่อผู้ใช้ที่เหมาะสมที่สุด เฟรมเวิร์กนี้ต้องการ Xamarin.iOS และ Xamarin.Android
  • MvvmCross เป็นเฟรมเวิร์ก แบบ Model-View-ViewModel (MVVM) ข้ามแพลตฟอร์มที่ใช้ Xamarin.iOS และ Xamarin.Android ในการพัฒนาแอปพลิเคชันบนมือถือ
  • MonoDevelopคือสภาพแวดล้อมการพัฒนาแบบบูรณาการโอเพนซอร์สและข้ามแพลตฟอร์มที่รองรับการสร้างแอปพลิเคชันสำหรับ ASP.NET, Gtk#, Meego, MonoTouch และ Silverlight/Moonlight
  • Moonlight (เลิกใช้งานแล้ว) เป็นการใช้งานSilverlightที่ใช้ Mono
  • OpenTKคือตัวเชื่อมต่อแบบจัดการสำหรับ OpenGL, OpenCL และ OpenAL
  • QtSharpคือส่วนเชื่อมต่อ C# สำหรับ เฟรมเวิร์ กQt
  • Resco MobileBusinessคือโซลูชันสำหรับนักพัฒนาแอปพลิเคชันบนมือถือที่ใช้งานได้บนหลายแพลตฟอร์ม
  • Resco MobileCRMคือโซลูชันสำหรับนักพัฒนาซอฟต์แวร์แบบข้ามแพลตฟอร์ม สำหรับแอปพลิเคชันบนมือถือที่ซิงโครไนซ์กับMicrosoft Dynamics CRM
  • ServiceStackคือเฟรมเวิร์กเว็บเซอร์วิส REST สำหรับ .NET แบบโอเพนซอร์สประสิทธิภาพสูง ที่ช่วยลดความซับซ้อนในการพัฒนาเว็บเซอร์วิส XML, JSON และ SOAP
  • SparkleShareเป็นซอฟต์แวร์ไคลเอ็นต์แบบโอเพนซอร์สที่ให้บริการพื้นที่จัดเก็บข้อมูลบนคลาวด์และการซิงโครไนซ์ไฟล์
  • Tao (ปัจจุบันถูกแทนที่ด้วย OpenTK) คือชุดคำสั่งสำหรับเชื่อมต่อกราฟิกและเกม (OpenGL, SDL, GLUT, Cg)
  • Xwtเป็นชุดเครื่องมือ GUI ที่แมปการเรียก API กับการเรียกแพลตฟอร์มดั้งเดิมของแพลตฟอร์มพื้นฐาน โดยเปิดเผย API ที่เป็นหนึ่งเดียวในแพลตฟอร์มต่างๆ และทำให้ส่วนติดต่อผู้ใช้แบบกราฟิกมีรูปลักษณ์และความรู้สึกแบบเนทีฟบนแพลตฟอร์มต่างๆ ได้ ช่วยให้สามารถสร้าง แอปพลิเคชันเดสก์ท็อปแบบ GUIที่ทำงานบนหลายแพลตฟอร์มได้โดยไม่ต้องปรับแต่งโค้ดสำหรับแพลตฟอร์มต่างๆ API ของ Xwt จะถูกแมปกับชุดของตัวควบคุมเนทีฟบนแต่ละแพลตฟอร์มที่รองรับ คุณสมบัติที่ไม่สามารถใช้งานได้บนแพลตฟอร์มเฉพาะจะถูกจำลองโดยใช้วิดเจ็ตเนทีฟ ซึ่งเรียกว่าการโฮสต์ในบริบทของ Xwt [ 41 ] Xwt ถูกใช้บางส่วนเป็นชุดเครื่องมือ GUI (นอกเหนือจาก GTK#) ในการพัฒนาXamarin Studio [ 42 ]เอ็นจิ้น "แบ็กเอนด์" ที่รองรับ ได้แก่ เอ็นจิ้น WPFและเอ็นจิ้น Gtk (โดยใช้Gtk# ) บนWindows , เอ็นจิ้น Cocoa (โดยใช้ MonoMac) และเอ็นจิ้น Gtk (โดยใช้ Gtk#) บนMac OS Xและเอ็นจิ้น Gtk (โดยใช้ Gtk#) บนLinux [ 43 ]

macOS:

  • Cocoa# – ตัวห่อหุ้มรอบชุดเครื่องมือ macOS ดั้งเดิม ( Cocoa ) (เลิกใช้งานแล้ว)
  • Monobjc – ชุดคีย์ลัดสำหรับการเขียนโปรแกรมบน macOS
  • MonoMac – ไลบรารีเชื่อมต่อรุ่นใหม่สำหรับการเขียนโปรแกรม macOS โดยอิงตามการออกแบบ API ของ MonoTouch

แพลตฟอร์มมือถือ:

  • MonoDroid. Mono สำหรับระบบปฏิบัติการ Android พร้อมการเชื่อมต่อกับ API ของ Android
  • MonoTouch แอปพลิเคชัน Mono สำหรับ iPhone, iPad และ iPod Touch พร้อมการเชื่อมต่อกับ API ของ iOS

ระบบปฏิบัติการ Windows:

  • MonoTools สำหรับ Visual Studioคือปลั๊กอินสำหรับ Visual Studio ที่ช่วยให้นักพัฒนา Windows สามารถกำหนดเป้าหมายไปยัง Linux และ macOS ได้โดยตรงจาก Visual Studio และยังทำงานร่วมกับSUSE Studio ได้ อีกด้วย

การใช้งานอื่นๆ

ไมโครซอฟต์มี .NET 2.0 เวอร์ชันหนึ่งที่ใช้งานได้เฉพาะกับWindows XP เท่านั้น เรียกว่าShared Source CLI (Rotor) อย่างไรก็ตาม ใบอนุญาต แบบ Shared Sourceของไมโครซอฟต์อาจไม่เพียงพอต่อความต้องการของชุมชน (เนื่องจากห้ามใช้ในเชิงพาณิชย์อย่างชัดเจน)

โครงการPortable.NETที่ถูกยกเลิกการใช้งานโดยFree Software Foundation [ 44 ]

โมโนดีเวลลอป

MonoDevelop เป็นสภาพแวดล้อมการพัฒนาแบบบูรณาการ (IDE) ฟรี ที่ออกแบบมาสำหรับภาษา C# และภาษา .NET อื่นๆ เช่นNemerle , BooและJava (ผ่านIKVM ) เป็นหลัก แม้ว่าจะรองรับภาษาอื่นๆ เช่นC , C++ , PythonและVala ด้วยก็ตาม เดิมที MonoDevelop เป็นการพอร์ตSharpDevelopไปยัง Gtk# แต่ต่อมาได้พัฒนาขึ้นเพื่อตอบสนองความต้องการของนักพัฒนา Mono IDE นี้ประกอบด้วยการจัดการคลาส ระบบช่วยเหลือในตัว การเติมโค้ดอัตโนมัติ Stetic (โปรแกรมออกแบบ GUI) การสนับสนุนโครงการ และดีบักเกอร์แบบบูรณาการ

โปรแกรมเรียกดูเอกสาร MonoDoc ช่วยให้เข้าถึงเอกสาร API และตัวอย่างโค้ดได้ โปรแกรมเรียกดูเอกสารนี้ใช้การจัดการเนื้อหาแบบวิกิ ทำให้ผู้พัฒนาสามารถแก้ไขและปรับปรุงเอกสารได้

Xamarin.iOS และ Xamarin.Android

Xamarin.iOS และ Xamarin.Android ซึ่งพัฒนาโดยXamarin ทั้งคู่ เป็นการนำ Mono มาใช้กับiPhoneและ สมาร์ทโฟนที่ใช้ Androidก่อนหน้านี้มีให้ใช้งานเฉพาะสำหรับการอนุญาตเชิงพาณิชย์เท่านั้น[ 45 ]หลังจากที่ Microsoft เข้าซื้อกิจการ Xamarin ในปี 2016 รันไทม์ Mono เองก็ได้รับการอนุญาตใหม่ภายใต้ใบอนุญาต MIT [ 46 ]และทั้ง Xamarin.iOS และ Xamarin.Android ก็เปิดให้ใช้งานฟรีและเป็นโอเพนซอร์ส[ 47 ]

Xamarin.iOS และ Xamarin.Android สิ้นสุดการสนับสนุนเมื่อวันที่ 1 พฤษภาคม 2024 โดยถูกรวมเข้ากับ .NET โดยตรง[ 48 ] [ 49 ] Microsoft แนะนำให้ย้ายไปใช้ . NET MAUI [ 49 ]

Xamarin.iOS

Xamarin.iOS (เดิมชื่อ MonoTouch) เป็นไลบรารีที่ช่วยให้นักพัฒนาสามารถสร้างแอปพลิเคชันที่ใช้ C# และ .NET ซึ่งทำงานบนอุปกรณ์ iPhone, iPod และ iPad ได้ โดยอิงตามเฟรมเวิร์ก Mono และพัฒนาขึ้นร่วมกับ Novell แตกต่างจากแอปพลิเคชัน Mono ตรงที่ "แอป" ของ Xamarin.iOS จะถูกคอมไพล์เป็นโค้ดเครื่องจักรที่กำหนดเป้าหมายเฉพาะสำหรับApple iPhone และ iPad [ 50 ] ซึ่งจำเป็นเนื่องจากเคอร์เนล iOS ป้องกันไม่ ให้ คอมไพเลอร์แบบ just-in-timeทำงานบนอุปกรณ์

ส่วนประกอบพื้นฐานของ Xamarin.iOS ประกอบด้วย:

  • คอมไพเลอร์
    • C# จาก Mono Project
    • คอมไพเลอร์จากผู้พัฒนาภายนอก เช่น Oxygene ของ RemObject ก็สามารถรองรับ Xamarin.iOS ได้เช่นกัน
  • ไลบรารีหลักของ .NET
  • ชุดพัฒนาซอฟต์แวร์ (SDK):
    • Linker – ใช้สำหรับรวมเฉพาะโค้ดที่ใช้ในแอปพลิเคชันเวอร์ชันสุดท้ายเท่านั้น
    • mtouch – คอมไพเลอร์และเครื่องมือเนทีฟที่ใช้ในการติดตั้งไปยังอุปกรณ์เป้าหมาย
    • เครื่องมือผสานรวมInterface Builder
  • ไลบรารีที่เชื่อมต่อ API ดั้งเดิมของ CocoaTouch
  • Xamarin Studio IDE

Xamarin Studio ถูกใช้เป็น IDE หลัก แต่ก็มีการเพิ่มลิงก์ไปยังXcodeและโปรแกรมจำลอง iOS ด้วย

ตั้งแต่เดือนเมษายนถึงต้นเดือนกันยายน พ.ศ. 2553 อนาคตของ MonoTouch ตกอยู่ในความไม่แน่นอน เนื่องจาก Apple ได้นำเงื่อนไขใหม่สำหรับนักพัฒนา iPhone มาใช้ ซึ่งห้ามไม่ให้พวกเขาพัฒนาด้วยภาษาอื่นนอกจาก C, C++ และObjective-Cและห้ามใช้เลเยอร์กลางระหว่างแพลตฟอร์ม iOS กับแอปพลิเคชัน iPhone ทำให้อนาคตของ MonoTouch และเทคโนโลยีอื่นๆ เช่นUnityไม่แน่นอน[ 51 ]จากนั้นในเดือนกันยายน พ.ศ. 2553 Apple ได้ยกเลิกข้อจำกัดนี้ โดยระบุว่าพวกเขากำลังผ่อนคลายข้อจำกัดด้านภาษาที่พวกเขาได้กำหนดไว้ก่อนหน้านี้ในปีนั้น[ 52 ] [ 53 ]

ประวัติเวอร์ชัน

ประวัติการเผยแพร่
วันที่เวอร์ชั่นหมายเหตุ
วันที่ 14 กันยายน 2552โมโนทัช 1.0 [ 54 ]การเผยแพร่ครั้งแรก
5 เมษายน 2553โมโนทัช 2.0 [ 55 ]รองรับ iPad
16 เมษายน 2553โมโนทัช 3.0 [ 56 ]รองรับ iPhone 4
6 เมษายน 2554โมโนทัช 4.0 [ 57 ]รองรับ iOS 4
วันที่ 12 ตุลาคม 2554โมโนทัช 5.0 [ 58 ]รองรับ iOS 5
19 กันยายน 2555โมโนทัช 6.0 [ 59 ]รองรับ iOS 6
20 กุมภาพันธ์ 2556Xamarin.iOS 6.2 [ 60 ]การสนับสนุน Visual Studio
24 กรกฎาคม 2556Xamarin.iOS 6.4 [ 61 ].NET 4.5 รองรับ async/await
19 มิถุนายน 2556Xamarin.iOS 7.0 [ 62 ]XCode 5 และ iOS 7 รองรับ
10 กันยายน 2557Xamarin.iOS 8.0 [ 63 ]รองรับ iOS 8 และ Xcode 6
วันที่ 16 กันยายน 2558Xamarin.iOS 9.0 [ 64 ]รองรับ iOS 9 และ Xcode 7
วันที่ 13 กันยายน 2559Xamarin.iOS 10.0 [ 65 ]รองรับ iOS 10 และ Xcode 8
19 กันยายน 2560Xamarin.iOS 11.0 [ 66 ]รองรับ iOS 11 และ Xcode 9
วันที่ 14 กันยายน 2561Xamarin.iOS 12.0 [ 67 ]รองรับ iOS 12 และ Xcode 10
วันที่ 13 กันยายน 2562Xamarin.iOS 13.0 [ 68 ]รองรับ iOS 13 และ Xcode 11
20 กันยายน 2020Xamarin.iOS 14.0 [ 69 ]รองรับ iOS 14 และ Xcode 12

Xamarin.Android

Xamarin.Android (เดิมชื่อ Mono for Android) ซึ่งพัฒนาโดยNovell ในช่วงแรก และต่อยอดโดยXamarinเป็นการใช้งาน Mono ที่เป็นกรรมสิทธิ์[ 70 ]สำหรับสมาร์ทโฟนที่ใช้Android [ 71 ] [ 72 ] [ 73 ]เปิดตัวครั้งแรกเมื่อวันที่ 6 เมษายน 2554 [ 74 ] Mono for Android ได้รับการพัฒนาขึ้นเพื่อให้ผู้พัฒนาสามารถเขียนแอปพลิเคชันข้ามแพลตฟอร์มที่ทำงานบนแพลตฟอร์มมือถือทั้งหมดได้ง่ายขึ้น[ 75 ]ในการสัมภาษณ์กับ H-Online Miguel de Icaza กล่าวว่า "วิสัยทัศน์ของเราคือการอนุญาตให้ผู้พัฒนาสามารถนำโค้ดเอนจิ้นและตรรกะทางธุรกิจกลับมาใช้ซ้ำได้ในทุกแพลตฟอร์มมือถือ และเปลี่ยนโค้ดส่วนติดต่อผู้ใช้เป็น API เฉพาะแพลตฟอร์ม" [ 76 ]

ในเดือนสิงหาคม พ.ศ. 2553 โฆษกของ Microsoft ชื่อ Tom Hanrahan จากศูนย์เทคโนโลยีโอเพนซอร์สของ Microsoft ได้กล่าวถึงคดีความที่ Oracle ฟ้องร้อง Google เกี่ยวกับการใช้ Java ใน Android ว่า "การกระทำแบบที่ Oracle กำลังดำเนินการกับ Google เกี่ยวกับ Java นั้นจะไม่เกิดขึ้น หากการพอร์ต .NET ไปยัง Android ทำผ่าน Mono ก็จะอยู่ภายใต้ ข้อ ตกลงสัญญาชุมชนของ Microsoft " [ 77 ] [ 78 ]

ส่วนประกอบหลักของ Xamarin.Android ประกอบด้วยส่วนประกอบดังต่อไปนี้:

  • รันไทม์โมโน
  • นักออกแบบ UI Android [ 79 ]
  • ห้องสมุด:
    • ไลบรารีคลาสหลักของ .NET
    • ไลบรารีที่เชื่อมต่อ API ดั้งเดิมของ Android/Java เข้าด้วยกัน
  • เครื่องมือ SDK สำหรับการบรรจุ การติดตั้ง และการดีบัก
  • การผสานรวม Xamarin Studio และ Visual Studio 2010 เพื่อออกแบบ UI, ดีบักจากระยะไกล และปรับใช้แอปพลิเคชัน

Mono บน macOS

โคโค่ชาร์ป

Cocoa# (หรือที่รู้จักกันในชื่อ CocoaSharp) เป็นเฟรมเวิร์ก เชื่อมต่อ สำหรับMac OS Xซึ่งอนุญาตให้แอปพลิเคชันที่พัฒนาด้วยรันไทม์ Mono เข้าถึงCocoa API ได้ โดยเปิดตัวครั้งแรกเมื่อวันที่ 12 สิงหาคม พ.ศ. 2547 [ 80 ]และรวมอยู่ในชุดการแจกจ่าย Mono ตั้งแต่เวอร์ชัน 1.0.6 ซึ่งวางจำหน่ายเมื่อวันที่ 18 กุมภาพันธ์ พ.ศ. 2548 ไม่มีการพัฒนาเพิ่มเติมตั้งแต่ปี พ.ศ. 2551 และปัจจุบันถูกยกเลิกการใช้งานแล้ว[ 81 ]

โมโนบีเจซี

Monobjc คือตัวแทนของ CocoaSharp มันช่วยให้นักพัฒนา .NET สามารถใช้ API ส่วนใหญ่ของ Mac OS X รวมถึง Cocoa โดยไม่ต้องเขียนโค้ดเนทีฟ แต่ยังคงได้ UI ที่เหมือนเนทีฟอยู่

Xamarin.Mac

Xamarin.Mac เป็นไลบรารีที่ช่วยให้นักพัฒนาสามารถเรียกใช้แอป .NET และ C# บนMacได้[ 82 ]

ใบอนุญาต

Mono ได้รับการอนุญาตใช้งานแบบคู่โดย Xamarin คล้ายกับผลิตภัณฑ์อื่นๆ เช่นQtและMozilla Application Suiteคอมไพเลอร์ C# และเครื่องมือของ Mono ได้รับการเผยแพร่ภายใต้GNU General Public License (GPLv2 เท่านั้น) (เริ่มตั้งแต่เวอร์ชัน 2.0 ของ Mono ซอร์สโค้ดของคอมไพเลอร์ C# ของ Mono ยังมีให้ใช้งานภายใต้MIT X11 License ด้วย ) [ 83 ]ไลบรารีรันไทม์ภายใต้GNU Lesser General Public License (LGPLv2 เท่านั้น) และไลบรารีคลาสภายใต้MIT License ใบอนุญาต เหล่านี้ทั้งหมดเป็นซอฟต์แวร์ฟรีและโอเพนซอร์สดังนั้น Mono จึงเป็น ซอฟต์แวร์ ฟรีและโอเพนซอร์ส

ใบอนุญาตของคอมไพเลอร์ C# ถูกเปลี่ยนจาก GPL เป็นใบอนุญาต MIT X11 [ 84 ]เพื่ออนุญาตให้นำโค้ดคอมไพเลอร์กลับมาใช้ใหม่ได้ในบางกรณีที่ GPL จะป้องกันไว้

  • คอมไพเลอร์แบบบริการของ Mono
    • เชลล์แบบอินเทอร์แอคทีฟโมโน
    • คอมไพเลอร์ C# แบบฝังตัว Mono
  • การใช้งาน Dynamic Binder ใน C# 4.0 ของ Mono
  • ตัวแยกวิเคราะห์และ กราฟASTในตัวของ MonoDevelop

เมื่อวันที่ 18 มีนาคม 2016 การเข้าซื้อกิจการ Xamarin ของ Microsoft ได้เสร็จสิ้นอย่างเป็นทางการ[ 85 ] เมื่อวันที่ 31 มีนาคม 2016 Microsoft ประกาศในงาน Microsoft Buildว่าจะอนุญาตให้ใช้ Mono ภายใต้MIT License อย่างสมบูรณ์ แม้ในกรณีที่ก่อนหน้านี้จำเป็นต้องใช้ใบอนุญาตเชิงพาณิชย์[ 86 ]และ Microsoft ระบุว่าจะไม่ใช้ "สิทธิบัตรที่เกี่ยวข้อง" ใดๆ กับฝ่ายที่ "ใช้ ขาย เสนอขาย นำเข้า หรือแจกจ่าย Mono" [ 87 ] [ 88 ]นอกจากนี้ยังมีการประกาศว่า Xamarin ได้มอบ Mono Project ให้กับ .NET Foundation [ 87 ]

สิทธิบัตรของโมโนและไมโครซอฟต์

เมื่อวันที่ 6 กรกฎาคม พ.ศ. 2552 ไมโครซอฟต์ประกาศว่าจะนำข้อกำหนด ECMA 334 และ ECMA 335 ไปไว้ภายใต้คำมั่นสัญญาของชุมชน โดยให้คำมั่นว่าจะไม่ใช้สิทธิบัตรของตนกับผู้ใดที่นำไปใช้ แจกจ่าย หรือใช้การใช้งานทางเลือกของ .NET [ 89 ]การใช้งานส่วนประกอบของสแต็ก .NET ที่ไม่ได้ส่งให้ECMAเพื่อการกำหนดมาตรฐานของ Mono เป็นแหล่งที่มาของความกังวลเกี่ยวกับการละเมิดสิทธิบัตรตลอดช่วงชีวิตของโครงการ[ 90 ]โดยเฉพาะอย่างยิ่ง มีการพูดคุยกันว่าไมโครซอฟต์สามารถทำลายโครงการ Mono ผ่านการฟ้องร้องเรื่องสิทธิบัตรได้หรือไม่[ 91 ]

เทคโนโลยีพื้นฐานที่ส่งไปยัง ECMA และส่วนประกอบเฉพาะของ Unix/GNOME นั้น อ้างว่าปลอดภัยเนื่องจาก Microsoft ได้วางมาตรฐาน ECMA 334 ( C# ) และ ECMA 335 ( CLI ) ไว้ภายใต้ Microsoft Community Promise อย่างชัดเจน ข้อกังวลส่วนใหญ่เกี่ยวข้องกับเทคโนโลยีที่ Microsoft พัฒนาขึ้นบน .NET Framework เช่นASP.NET , ADO.NETและWindows Forms (ดูnamespaces ที่ไม่เป็นมาตรฐาน ) ซึ่งเป็นส่วนประกอบของสแต็กความเข้ากันได้กับ Windows ของ Mono เทคโนโลยีเหล่านี้ในปัจจุบันยังไม่ได้ถูกนำมาใช้งานอย่างเต็มที่ใน Mono และไม่จำเป็นสำหรับการพัฒนาแอปพลิเคชัน Mono แต่มีไว้สำหรับนักพัฒนาและผู้ใช้ที่ต้องการความเข้ากันได้อย่างสมบูรณ์กับระบบ Windows

ในเดือนมิถุนายน พ.ศ. 2552 คณะกรรมการด้านเทคนิคของ Ubuntu ระบุว่า "ไม่มีเหตุผลที่จะยกเว้น Mono หรือแอปพลิเคชันที่ใช้ Mono จากคลังเก็บข้อมูล หรือจากชุดการติดตั้งเริ่มต้น" [ 92 ]

Richard Stallman จาก Free Software Foundationได้กล่าวไว้เมื่อวันที่ 2 มิถุนายน 2552 ว่า “...เราควรห้ามไม่ให้ผู้คนเขียนโปรแกรมด้วยภาษา C# ดังนั้น เราไม่ควรใส่การใช้งาน C# ไว้ในการติดตั้งเริ่มต้นของ GNU/Linux หรือในวิธีการติดตั้ง GNOME หลักๆ” [ 93 ]เมื่อวันที่ 1 กรกฎาคม 2552 Brett Smith (จาก FSF เช่นกัน) กล่าวว่า “สิทธิบัตรของ Microsoft นั้นอันตรายกว่ามาก: เป็นบริษัทซอฟต์แวร์รายใหญ่เพียงแห่งเดียวที่ประกาศตนเองว่าเป็นศัตรูของ GNU/Linux และระบุเจตนาที่จะโจมตีชุมชนของเราด้วยสิทธิบัตร” “C# เป็นภัยคุกคามที่ไม่เหมือนใครสำหรับเรา” และ “คำมั่นสัญญาของชุมชนไม่ได้ทำอะไรเพื่อเปลี่ยนแปลงสิ่งเหล่านี้เลย” [ 94 ]

Paul Frields หัวหน้าโครงการ Fedoraกล่าวว่า "เรามีความกังวลอย่างมากเกี่ยวกับ Mono และเราจะพิจารณาเรื่องนี้ต่อไปร่วมกับที่ปรึกษาทางกฎหมายของเราเพื่อดูว่าจำเป็นต้องดำเนินการใดบ้าง" แต่ "เรายังไม่ได้ข้อสรุปทางกฎหมายที่ชัดเจนพอที่จะตัดสินใจนำ Mono ออก" [ 95 ]

ในเดือนพฤศจิกายน 2011 ในการประชุม Ubuntu Developer Summitนักพัฒนาได้ลงคะแนนให้ลบโปรแกรมเล่นสื่อ Banshee ที่ใช้ Mono ออกจากการติดตั้งเริ่มต้นของ Ubuntu ตั้งแต่Ubuntu 12.04 เป็นต้น ไป แม้ว่าเหตุผลที่รายงานจะรวมถึงปัญหาด้านประสิทธิภาพบนสถาปัตยกรรม ARMปัญหาการบล็อกในเวอร์ชัน GTK+ 3 และในความคิดเห็นของพวกเขาคือ "ไม่ได้รับการดูแลรักษาอย่างดี" แต่ก็มีการคาดการณ์ว่าการตัดสินใจนี้ได้รับอิทธิพลจากความต้องการที่จะลบ Mono ออกจากการแจกจ่ายพื้นฐานด้วย เนื่องจากโปรแกรมที่เหลือที่ขึ้นอยู่กับ Mono ได้แก่gbrainyและTomboyก็จะถูกลบออกไปด้วย นักพัฒนา Mono Joseph Michael Shields ได้ปกป้องประสิทธิภาพของ Banshee บน ARM และยังกล่าวอ้างว่า Banshee ไม่ได้รับการดูแลรักษาอย่างดีว่าเป็น "การดูหมิ่นส่วนบุคคล" ที่มุ่งเป้าไปที่หนึ่งในผู้มีส่วนร่วมหลัก[ 96 ]

ซอฟต์แวร์ที่พัฒนาด้วย Mono

เครื่องเล่นมีเดียแบนชี
GNOME Do

โปรแกรมจำนวนมากที่ครอบคลุมการใช้งานหลากหลายประเภทได้รับการพัฒนาโดยใช้Application Programming Interface (API) ของ Mono และภาษา C# โปรแกรมบางโปรแกรมที่เขียนขึ้นสำหรับเดสก์ท็อป Linux ได้แก่ Banshee, Beagle, F-Spot , Gbrainy , Docky / GNOME Do , MonoTorrent , PintaและTomboy ส่วน โปรแกรมLogos 5 Bible Study Software (เวอร์ชัน OS X)นั้นเขียนขึ้นสำหรับ MacOS

เกมวิดีโอจำนวนหนึ่ง เช่นThe Sims 3และSecond Life (สำหรับภาษาสคริปต์ ) เซิร์ฟเวอร์โลกเสมือนOpenSimulator หรือเกมที่สร้างด้วยเอน จิ้นเกมUnityหรือMonoGameก็ใช้ Mono เช่นกัน[ 97 ] OpenRAรวมApple Disk Imageและ Linux AppImagesเข้ากับ Mono ซึ่งโดยพื้นฐานแล้วช่วยลดการพึ่งพาของ Mono ในเกมได้เกือบทั้งหมด[ 98 ]

ประวัติเวอร์ชัน

ประวัติการเผยแพร่[ 99 ]
วันที่เวอร์ชัน[ 100 ]หมายเหตุ
30 มิถุนายน 25471.0 [ 101 ]รองรับ C# 1.0
21 กันยายน 25471.1 [ 102 ]
9 พฤศจิกายน 25491.2 [ 103 ]รองรับ C# 2.0
6 ตุลาคม 25512.0 [ 104 ]API ของ Mono ตอนนี้เทียบเท่ากับ .NET 2.0 แล้ว มีการแนะนำ คอมไพเลอร์ C# 3.0และ Visual Basic 8 API เฉพาะของ Mono ใหม่ ได้แก่ Mono.Cecil, Mono.Cairo และ Mono.Posix Gtk# 2.12 เปิดตัวแล้ว มีการแนะนำเครื่องมือตรวจสอบ Gendarme และ Mono Linker
วันที่ 13 มกราคม 25522.2 [ 105 ]Mono เปลี่ยนเอ็นจิ้น JIT ไปใช้การแสดงผลภายในแบบใหม่[ 106 ]ซึ่งให้ประสิทธิภาพที่เพิ่มขึ้นและแนะนำ การสนับสนุน SIMDในเนมสเปซ Mono.Simd [ 36 ] Mono แนะนำ การคอมไพล์ แบบ Full Ahead of Timeที่ช่วยให้นักพัฒนาสามารถสร้างแอปพลิเคชันแบบคงที่ได้อย่างสมบูรณ์ และเปิดตัว C# Compiler as a Service [ 34 ]และ C# Interactive Shell [ 35 ] (C# REPL)
30 มีนาคม 25522.4 [ 107 ]การอัปเดตครั้งนี้ส่วนใหญ่เป็นการปรับปรุงคุณสมบัติทั้งหมดที่มีอยู่ในเวอร์ชัน 2.2 และเป็นรากฐานสำหรับการสนับสนุนระยะยาวของ Mono ใน SUSE Linux
15 ธันวาคม พ.ศ. 25522.6 [ 108 ]ขณะนี้รันไทม์ Mono สามารถใช้ LLVM เป็นแบ็กเอนด์สำหรับการสร้างโค้ดได้แล้ว และในเวอร์ชันนี้ยังได้แนะนำ Mono co-routines, Mono Soft Debugger และระบบรักษาความปลอดภัย CoreCLR ที่จำเป็นสำหรับ Moonlight และปลั๊กอินบนเว็บอื่นๆ นอกจากนี้ในไลบรารีคลาส System.IO.Packaging ยังมีการเปิดตัว WCF client, WCF server และ LINQ to SQL Interactive shell รองรับการเติมข้อความอัตโนมัติ และ LINQ to SQL รองรับแบ็กเอนด์ฐานข้อมูลหลายประเภท และระบบสร้าง xbuild ก็ได้รับการแนะนำด้วย
22 กันยายน 25532.8 [ 109 ]โดยค่าเริ่มต้นจะใช้โปรไฟล์ .NET 4.0, รองรับC# 4.0 , ตัวเก็บขยะแบบใหม่ (Garbage Collector) รวมถึง Parallel Extensions , WCF Routing, CodeContracts , ASP.NET 4.0 และยกเลิกการสนับสนุนโปรไฟล์ 1.0; เอ็นจิ้น LLVM ได้รับการปรับแต่งเพื่อรองรับโค้ดที่สร้างขึ้น 99.9%, สามารถเลือก LLVM และ GC ได้ในขณะรันไทม์; รวมDynamic Language Runtime , MEF, ASP.NET MVC 2, โค้ดโอเพนซอร์ส OData Client จาก Microsoft; จะกลายเป็นเวอร์ชัน 3.0
15 กุมภาพันธ์ 25542.10 [ 110 ]
18 ตุลาคม 25553.0 [ 111 ]การรองรับ C# 5.0 , การรองรับแบบอะซิงโครนัส, การอัปเกรดไลบรารีคลาสพื้นฐานแบบอะซิงโครนัส และ MVC4 - รองรับบางส่วน ไม่รองรับคุณสมบัติอะซิงโครนัส
24 กรกฎาคม 25563.2 [ 112 ]ตอนนี้ตัวเก็บขยะเริ่มต้นคือ SGEN แทนที่จะเป็น Boehm
31 มีนาคม 25573.4 [ 113 ]
12 สิงหาคม 25573.6 [ 114 ]
4 กันยายน 25573.8 [ 115 ]
4 ตุลาคม 25573.10 [ 116 ]
วันที่ 13 มกราคม 25583.12 [ 117 ]
29 เมษายน 25584.0 [ 118 ]โดยค่าเริ่มต้นจะใช้โปรไฟล์ .NET 4.5 และจัดส่งเฉพาะแอสเซมบลี .NET 4.5 เท่านั้น โดยใช้ C# 6.0 เป็นค่าเริ่มต้น นี่คือรุ่นแรกที่รวมโค้ด .NET Core โอเพนซอร์สของ Microsoft เข้าไว้ด้วย
10 พฤษภาคม 25605.0 [ 119 ]เปิดใช้งานคอมไพเลอร์ Roslyn C# เพื่อรองรับ C#7; เปิดใช้งาน msbuild และยกเลิกการใช้งาน xbuild เพื่อความเข้ากันได้ที่ดีขึ้น; เปิดใช้งานตัวเก็บขยะ SGen แบบพร้อมกันเพื่อลดเวลาที่ใช้ในการเก็บขยะ; แนะนำ AppleTLS stack บน macOS สำหรับการเชื่อมต่อ HTTPS; ความคืบหน้าอย่างต่อเนื่องในการรวมไลบรารีคลาส .NET; อัปเดต libjpeg ในแพ็คเกจ macOS
14 กรกฎาคม 25605.2 [ 120 ]รองรับ .NET Standard 2.0, ชื่อแอสเซมบลีที่แข็งแกร่ง และสมาชิกอินเทอร์เฟซเริ่มต้นแบบทดลอง
5 ตุลาคม 25605.4 [ 121 ]ขณะนี้ JIT Runtime รองรับการคอมไพล์เมธอดแบบพร้อมกันและการปรับปรุงประสิทธิภาพอื่นๆ อีกมากมาย; เพิ่มแอสเซมบลีอ้างอิง .NET 4.7
1 กุมภาพันธ์ 25615.8 [ 122 ]การพอร์ต WebAssemblyเบื้องต้น; โหมดสำหรับ SGen GC; รวมถึงเครื่องมือ REPL csi (C# interactive) ของ Roslyn
26 กุมภาพันธ์ 25615.10 [ 123 ]ขณะนี้ Interpreter ได้ถูกรวมอยู่ในชุดการติดตั้งเริ่มต้นแล้ว; Runtime รองรับ Default Interface Methods แล้ว; WebAssembly ถือว่ามีความน่าเชื่อถือแล้ว; รองรับ .NET 4.7.1 / C# 7.2 / F# 4.1
8 พฤษภาคม 25615.12 [ 124 ]พอร์ตไปยัง IBM AIX/i; ตอนนี้รวม คอมไพเลอร์ VB.NET แล้ว ; มีตัวเลือกให้ใช้jemalloc
7 สิงหาคม 25615.14 [ 125 ]มีการอัปเดต Windows.Formsครั้งใหญ่เพื่อปรับปรุงความเข้ากันได้กับ .NET
8 ตุลาคม 25615.16 [ 126 ]ตัวจัดการขยะแบบไฮบริดระงับการทำงาน; รองรับใบรับรองไคลเอ็นต์; รองรับ C# 7.3
21 ธันวาคม 25615.18 [ 127 ]รองรับ .NET 4.7.2; มีการใช้โค้ด CoreFX มากขึ้น
11 เมษายน 25625.20 [ 128 ]SSPI (Security Support Provider Interface) ในแอสเซมบลี System.Data; แก้ไขปัญหาต่างๆ แล้ว
17 กรกฎาคม 25626.0 [ 129 ]คอมไพเลอร์ C# ใช้เวอร์ชัน C# 8.0 RC เป็นค่าเริ่มต้น; มีการปรับปรุงเสถียรภาพต่างๆ ในการรองรับดีบักเกอร์; ตัวแปลภาษา Mono มีฟังก์ชันการทำงานครบถ้วนและเสถียร
23 กันยายน 25626.4 [ 130 ]คอมไพเลอร์ C# รองรับภาษา C# เวอร์ชัน 8; รองรับ .NET Standard 2.1
10 ธันวาคม 25626.6 [ 131 ]เพิ่มแอสเซมบลีอ้างอิง .NET 4.8
15 มกราคม 25636.8 [ 132 ]แก้ไขข้อผิดพลาดต่างๆ
19 พฤษภาคม 25636.10 [ 133 ]แก้ไขข้อผิดพลาดต่างๆ
24 พฤศจิกายน 20206.12 [ 134 ]แก้ไขข้อผิดพลาดต่างๆ
4 มีนาคม 25686.14 [ 135 ]วางจำหน่ายครั้งแรกหลังจากย้ายไปWineHQ

ดูเพิ่มเติม

  • เว็บไซต์อย่างเป็นทางการแก้ไขข้อมูลนี้ได้ที่วิกิดาต้า
  • หน้าหลัก MonoTouchสำหรับการพอร์ตไปยังผลิตภัณฑ์พกพาของApple Inc.
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Mono_(software)&oldid=1350759336#Monobjc "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ โมโน (ซอฟต์แวร์)

Mono เป็น เฟรมเวิร์กซอฟต์แวร์โอ เพนซอร์สฟรี ที่มีจุดมุ่งหมายเพื่อเรียกใช้ซอฟต์แวร์ที่สร้างขึ้นสำหรับ .

ประวัติศาสตร์

เมื่อ Microsoft ประกาศ .NET Framework ครั้งแรก ในเดือนมิถุนายน พ.ศ.

สถานะปัจจุบันและแผนงาน

เวอร์ชันปัจจุบันของ Mono คือ 6.12.0 (ณ เดือนมิถุนายน 2024) เวอร์ชันนี้มี API หลัก ของ .NET Framework และรองรับ Visual Basic.NET และ C# 7.0 LINQ to Objects , XML และ SQL เป็นส่วนหนึ่งของการแจกจ่าย Windows Forms 2.

แสงจันทร์

การใช้งานโอเพนซอร์สของ Microsoft Silverlight ที่เรียกว่า Moonlight ได้ถูกรวมไว้ตั้งแต่ Mono 1.9 [ 23 ] Moonlight 1.0 ซึ่งรองรับ API ของ Silverlight 1.0 ได้รับการเผยแพร่เมื่อวันที่ 20 มกราคม 2009 Moonlight 2.0 รองรับ Silverlight 2.