Apple Silicon และ Developer ในปลายปี 2021 รองรับอะไรบ้างแล้ว

หลังจากที่ Apple Silicon ออกมา เมื่อปีก่อน ตอนนั้นบอกเลยว่า เรื่องของ Software Compatibility ต่าง ๆ เป็นเรื่องที่น่ากังวลมาก เพราะมันเป็นการเปลี่ยนสถาปัตยกรรมจาก x86 ที่รันบน Intel กลายเป็น ARM ที่รันอยู่บน Apple Silicon นั่นเอง มาดูกันว่า เมื่อเวลาผ่านไปปีกับอีกเดือนแล้ว ฝากของนักพัฒนาของเรา ๆ เรื่องของ Software Compatibility มันมีการพัฒนาเป็นอย่างไร และ ถ้าเราจะซื้อเครื่องที่เป็น Apple Silicon มาใช้ มันจะมีเคสไหนบ้างที่ดี และ เคสไหนบ้างที่มันใช้ไม่ได้กัน

งานส่วนใหญ่ที่เราทำ เราจะทำจะอยู่ในหมวดของ Web Developement, Data Science, AI และ Cyber Security ทั้งหมดเลย ไม่ได้เข้าไปทำพวก​ Mobile App เยอะเท่าไหร่ โดยภาษาที่เราทำงานเป็นส่วนใหญ่ก็จะอยู่ที่ Python และ Go เป็นหลัก มี Javascript บ้างงงง ประปราย อะไรแถว ๆ นั้น

Homebrew

Homebrew เป็น Package Manager ที่โคตรสุดยอดอยู่แล้ว มันมีโปรแกรมหลาย ๆ ตัวที่มันรองรับเยอะมาก ๆ จนเรียกได้ว่าเป็น Package Manager สามัญจะจำเครื่องเลยก็ว่าได้ ไม่ว่าจะเป็นงานทาง Development หรือด้านอื่น ๆ เช่น Bioinformatics มันก็มี Formular สำหรับติดตั้งโปรแกรมทางนั้นด้วย ทำให้เราสามารถติดตั้งโปรแกรมต่าง ๆ ได้อย่างง่ายดายเลย

ตั้งแต่ Homebrew version 3.0 ขึ้นไป ก็จะรองรับ Apple Silicon อย่างเต็ม ๆ แล้วละ มีการแยกแล้วว่าตัวไหนมันจะรองรับ Apple Silicon ได้ตรง ๆ หรือจะเป็นตัวที่รองรับบน x86 ก็สามารถรันผ่าน Rosetta ได้เลย หรือจะเป็นตัวที่ไม่ได้มี Binaries มา มันก็สามารถใช้ Compiler ทำให้เป็นของฝั่ง Apple Silicon ได้เลย

ส่วนใหญ่โปรแกรมที่เราทำงานในฝั่ง Developer, Netw0rk และ Cyber Security ไม่ค่อยมีปัญหากับ M1 เท่าไหร่ ก็ลงได้หมดเลยนะ แต่ ๆ เราจะมีปัญหาอยู่บางส่วนคือ เราจะยังต้องแยก Version ที่เป็น ARM และ x86 ใช้งานอยู่ เช่นพวก C Compiler ที่ Target Execution ของเรายังเป็น x86 อยู่ และ Dependencies บางส่วนในเครื่อง เราต้องทำเป็น ARM ทำให้เราจะต้องลงมันทั้งคู่แล้วสลับใช้กัน บางทีมันก็จะน่ารำคาญนิดหน่อย แต่ถามว่ารันได้มั้ยก็รันทดสอบได้ปกตินะ ไม่ได้มีปัญหาอะไร เพราะก็ทำงานผ่าน Rosetta ไป ไม่มีปัญหา

อีกปัญหามันจะอยู่ที่พวกโปรแกรมที่มัน Lagacy หน่อย ๆ อย่างฝั่งพวก Bioinformatics ที่เราเจอมาตอนที่เราทำการทดสอบเครื่อง Macbook Pro ก่อนหน้านี้ เราก็เจอปัญหากับหลาย ๆ โปรแกรมที่เราไม่สามารถติดตั้งผ่าน Homebrew ได้ ก็ งง เหมือนกัน เพราะก่อนหน้านี้ตอนที่ใช้ Intel ทำได้ จนเราไปเอา Source Code มา แล้ว Compile เอง บ้างก็เอา Executable ที่เป็น macOS x86 มารัน ก็ใช้งานได้เฉย อาการพวกนี้ เราเจอแค่ในพวกโปรแกรมเก่า ๆ แต่ในโปรแกรมที่เราใช้งานทั่ว ๆ ไป เราไม่เจออะไรพวกนี้เลย

Docker

อีกโปรแกรมที่เราใช้งานบ่อยไม่แพ้กัน หรือเรียกได้ว่าโคตรบ่อย ทุกวันเลย เริ่มจากตัว Docker Engine ที่เป็นแกนหลักของตัว Docker เอง ตอนนี้ ก็รองรับ Apple Silicon โดยสมบูรณ์แล้ว ต่างจากตอนแรกที่เราจะต้องรันผ่า Rosetta อยู่ แต่ส่วนที่น่าปวดหัวในบางครั้ง น่าจะเป็นพวก Image ต่าง ๆ ที่อาจจะยังไม่ได้ทำมาให้รองรับ ARM ตัวอย่างที่ชัด ๆ เลยคือ MySQL ที่เราไม่สามารถรันบน ARM ได้ ทำให้เราจะต้องไปรันเป็น x86 แล้วใช้ Rosetta แปลงอีกที

สิ่งที่ทำให้ปวดหัวเข้าไปอีก Docker มันไม่ได้เลือกให้เราเองนะว่า ถ้ามันไม่มี ARM มันจะดึง x86 เข้ามาให้เราเลย ทำให้เวลาเราดึงพวก DockerFile เก่ามาใช้งาน หรือพวก Compose File เข้ามาใช้งาน มันจะใช้งานตรง ๆ เลยไม่ได้ เราจะต้องพ่วง Argument เพื่อบอกว่า เราจะขอ Image ที่เป็น x86 เข้ามาใช้งานนั่นเอง อย่างใน Laravel Sail เอง เราติดตั้งเข้ามา ก็พบว่า หลาย ๆ Image มันยังใช้เป็น x86 อยู่เลย เช่น Selenium, Mailhog, Meilisearch และ MySQL

ทำให้ในหลาย ๆ ครั้ง เราพยายามจะไปหา Alternative หน่อย เช่น RDBMS เราอาจจะขยับไปรันบน MariaDB ไม่ก็ PostgreSQL ไป เพราะ Feature หลัก ๆ ที่เราทำงานมันจะเหมือนกันหมด เลยทำให้เราทำงานได้ง่ายขึ้นเยอะ แต่ถามว่ารัน MySQL ได้มั้ย มันก็ได้ไง เรื่อง Performance มันก็ไม่ได้แย่เลยนะ อีกอย่างเวลาเราทำงานบนเครื่องของเรา มันก็เป็นแค่ Development Environment เท่านั้น ดังนั้น มันจะช้า เพราะ Rosetta ไปสักหน่อย มันก็ไม่ได้เดือดร้อนอะไรขนาดนั้น สุดท้ายเอาไปรันบน Server จริง ๆ ที่เป็น x86 มันก็ไม่มีปัญหาเลย

Data Science + AI Tasks

มาที่งานแรก ที่เราทำบ่อยที่สุดแล้วอย่างงานในจำพวก Data Science และ AI ทั้งหลาย ที่จะมีพวก การทำ Machine Learning Model ไปด้วยเลยโดยเราจะใช้งาน Python เป็นหลัก

ตัว Python เองมันรองรับ ARM อยู่แล้วละ ไม่ใช่เรื่องใหญ่อะไรเท่าไหร่ แต่ปัญหา มันจะอยู่ที่พวก Package ที่เราจะติดตั้งเพิ่มนี่แหละ เพราะอย่างที่เรารู้กันดีว่า ใน Python เราสามารถเรียกพวก Package จาก C หรือ C++ ได้ด้วย ซึ่งมันเป็นภาษาที่ต้อง Compile ซึ่งบางครั้งเวลาเราติดตั้งผ่านพวก pip หรือ conda มันจะเอา Binary มาเลย ไม่ได้ Compile ในเครื่องเราเองใหม่ ทำให้เวลาเราใช้งานบางทีมันจะมีปัญหา หรือติดตั้งไม่ได้เลย ทำให้ตัว Package Manager เราจะต้องใช้ตัวที่มันเช็คเรื่องของสถาปัตยกรรมให้เราได้ด้วย ตัวที่เราใช้อยู่คือ miniforge มันก็คือ Miniconda ที่เพิ่ม conda-forge Channel เข้าไป

มาที่ Package ที่เราใช้งานกันบ้าง ส่วนใหญ่มาก ๆ เลยประมาณ 90% เราจะติดตั้งผ่าน conda และใช้งานได้หมดเลย โดยที่ไม่มีปัญหาเลย เช่น Pandas, Seaborn, Matplotlib, Joblib และ Scikit-Learn กับมันจะมีตัวที่ยุ่งยากกว่าเดิมนิดหน่อย (ซึ่งแมร่งก็ยุ่งมาตลอด) คือ Tensorflow ที่ Apple ทำให้ง่ายแล้วละผ่าน Package tensorflow-macos และส่วนเสริมที่ทำให้เราใช้งาน GPU ผ่าน Metal ได้ แต่โดยรวม เราบอกเลยว่า ง่ายกว่าการติดตั้งบน Nvidia GPU มากที่ต้องติดตั้ง cuDNN อะไรสารพัดมาก ๆ ไหนจะเรื่อง Version Compatibility อะไรอีกเยอะแยะ แต่ของ macOS ตอนนี้คือ ไม่ต้องสนอะไร รันผ่าน conda ได้ตรง ๆ เลย การใช้งาน โดยรวม ถือว่าไม่ช้าเลย เร็วมาก ๆ เรียกได้ว่า Intel Mac ตัวเก่าต้องอายไปเลย

แล้วที่เราเคยเขียนเรื่องที่เราติดตั้ง OpenCV ไปก่อนหน้านี้ ตอนนี้เราสามารถลงผ่าน Conda ได้ตรง ๆ แล้วเช่นกัน โดยการ Update conda ผ่านคำสั่ง conda update conda แล้วเราก็สามารถรัน conda install opencv ได้เลย ไม่ Failed เหมือนก่อนหน้านี้แล้ว เย้ ~

Web Backend

ฝั่งของ Web Backend เราจะทำงานกับ Go และ PHP ซะเยอะ (อย่าบูลี่หนู PHP เขาก็มีข้อดีของมันอยู่ เราก็แค่เลือกใช้ของที่เหมาะกับ Solution ของมันเท่านั้นเอง) กับมี Python บ้าง ที่จะเป็นส่วนที่ทำพวก Inference API ซึ่งมันจะง่ายกว่าถ้าเราทำผ่าน Python ตรง ๆ เลย

ตัว Go และ PHP เราไม่มีปัญหากับมันเลยนะ มันสามารถที่จะติดตั้ง Package ต่าง ๆ เช่นใน Go เราใช้ Gin เป็น Web Framework และ ฝั่ง PHP เราใช้ Laravel และ Lumen มันก็สามารถติดตั้งได้อย่างไม่มีปัญหา และ ใช้งานก็ลื่นไหลดีไม่มีปัญหาเท่าไหร่เลย ยิ่ง Laravel ที่เราไม่ได้เขียนมานานมาก จนตอนนี้กลับมาเขียนก็คือ เข้ มันมี Laravel Sail ทำให้เราติดตั้ง Container ที่จำเป็นได้เลย โดยที่เราไม่ต้องมานั่ง Setup ผ่าน Composer แล้วยิง Container ไปมาแล้ว เดี๋ยวนี้มันดีจริง ๆ

ส่วนฝั่ง Backend ที่เป็น Node.js อันนี้เราไม่แน่ใจเลยว่า มัน Support การทำงานได้ขนาดไหนแล้วเหมือนกัน เราก็เขียนแค่พื้นฐาน ๆ ง่าย ๆ มันก็ใช้งานได้หมดนะ ไม่ได้มีปัญหาอะไร เท่าที่เจอมาปวดหัวสุด ๆ ของ JS ไม่ได้อยู่ที่ Backend เลย แต่อยู่ที่ Static Site Generator อย่าง Gatsby.js ที่เราไม่สามารถ Install Dependencies ได้ เพราะ Node.js version ไม่ Support เราต้องย้อน Version อะไรสารพัด แต่ตอนนี้น่าจะแก้แล้วละมั้ง

IDE และ Tools ต่าง ๆ

ส่วนของ IDE และ Tools ต่าง ๆ โดยทั่ว ๆ ไป เราก็จะอยู่ที่ Visual Studio Code กันซะเยอะ ซึ่งก็ไม่มีปัญหาเลย เพราะ VS Code สามารถทำงานได้แบบ Native บน Apple Silicon แล้ว แต่ถ้าใครที่จะใช้อะไรที่ Lagacy เก่า แต่เก๋าหน่อย Vim ก็ใช้งานได้ปกติเลย ไม่มีปัญหาอะไรอยู่แล้ว

ส่วนโปรแกรม IDE ที่ใหญ่ขึ้นมาหน่อย หลาย ๆ คนน่าจะใช้งานของพวก Jetbrain อย่าง Intellij อะไรพวกนี้ เราบอกเลยว่า เราขอจัดให้มันอยู่ใน App ที่ Optimise สำหรับ Apple Silicon ได้ดีมาก ๆ เมื่อก่อนเราใช้งานบน Macbook Pro 13-inch 2018 เวลาเราเปิดโปรแกรมขึ้นมา บนหน้า Splash Screen เราต้องรอมันโหลดสักพักเลย แต่พอมาใช้พวก Apple Silicon เช่น M1 บน Macbook Air ก่อนหน้านี้ ก็คือ มันโหลดเร็วมาก ๆ คือ เราไม่เห็น Splash Screen กดแล้วแว่บเดียวเลย มันขึ้นหน้าต่างขึ้นมาเลย คืออะไรพี่จะเร็วได้ขนาดนั้น แม้กระทั่งการเปิดหน้าต่างตัวเลือกต่าง ๆ เมื่อก่อนมันจะมีอึกนึงรอโหลด แต่อันนี้คือ กดปุ๊บมาปั๊บเลย หรือโปรแกรมของ Jetbrains ตัวอื่นที่เราใช้ก็พวก PHPStorm กับ GoLand ก็คือ เร็วจริงอะไรจริง แบบเหลือเชื่อเลยว่า Apple Silicon มันทำให้ลื่นไหลได้ขนาดนั้นเลยเหรอ

อย่างที่เราบอกว่า เราทำงานฝั่ง Backend ค่อนข้างเยอะ ทำให้เราจะมีใช้พวก API Explorer ด้วย ซึ่งตัวที่เราใช้ Paw โอเคแหละ มันแอบแพงไปหน่อย แต่เราใช้งานผ่าน Setapp เลยไม่มีปัญหาอะไรเท่าไหร่ นอกจากนั้น มันยังรองรับ Apple Silicon เต็มตัวแล้ว ทำให้เราทำงานได้เร็วขึ้นมาก ๆ โดยเฉพาะถ้าเราลองเล่นอะไรกับมันโหด ๆ อย่างการลองยัด Payload กลับมาให้ใหญ่ ๆ เลย ก่อนหน้านี้เครื่อง Intel คือ Crash ไปเลยจ้าาา แต่พอมาเป็น M1 และ M1 Max ลองกับ API ที่บ้าอันเดียวกันเลย ก็คือไม่เป็นอะไรเลย ย้ำว่า ไม่เป็นอะไรเลย...... ได้ยังไงฟร๊ะ !!!

สู่ขิต ด้วย VM

งานนึงที่จนตอนนี้ก็ยังไม่ Recommend ให้หาทำ ซื้อ Apple Silicon มาเล่นคือ งานที่ต้องใช้ VM ทั้งหลาย ถึงจะบอกว่า Parallel Desktop จะรัน Windows ได้เร็วก็เถอะ แต่มันก็ยังรัน Windows ที่เป็น ARM-Based อยู่ดี ณ วันที่เขียน ตัว Virtualisation ทั้งหมดเลย ไม่สามารถรัน x86 OS ทั้งหมดเลย ทำให้งานบางส่วนอาจจะมีปัญหาได้

อย่างงานนึงที่เราทำแล้ว กำหมัด เพราะมันต้องใช้ VM คือพวก Malware Sampling ทั้งหลาย ที่เราไม่ควรจะทำบนเครื่องเราเองไง เราก็ต้องทำ Isolation Environment แล้วค่อย ๆ เก็บค่าจากมันมา แน่นอนว่า VM คือตัวเลือกที่ดีที่สุดแล้ว ซึ่ง Malware หลาย ๆ ตัว ก็จะรันบน x86 ทั้งนั้น ทำให้เราไม่สามารถทำงานพวกนี้ได้เลย สุดท้ายก็ต้องเอาเครื่อง Server ไปเปิด VM เอา แล้ว Remote เข้าไป

Bonus : แนะนำ Macbook สำหรับการทำงาน Software Development

ณ วันที่เขียน การใช้งาน Apple Silicon กับการทำงานจำพวก Software Development เราแนะนำหมดเลยนะ ยกเว้นพวกที่ต้องใช้ VM ในการทำงาน กับเขียน .NET Framework (อันนั้นแน่อยู่แล้วป่ะ) ข้ามไปเลย เพราะมันจะทำให้เราทำงานได้ปวดหัวขึ้นเยอะมาก แต่ถ้าใครที่ไม่ได้ทำงานกับพวกที่เราว่ามา การใช้งาน Apple Silicon มันทำให้เราทำงานได้เร็วขึ้นเยอะมาก ๆ จริง ๆ เร็วกว่าพวก Macbook Pro 16-inches ที่ CTO เป็น i9 ซะอีกในบางงาน

ซึ่ง Spec ที่เราแนะนำส่วนใหญ่ จะอยู่ที่ Macbook Pro 13-inches M1 ตัวปกตินี่แหละ แต่แนะนำให้ CTO RAM ขึ้นไปเป็น 16 GB ไปเลยกำลังดี เพราะบางที เราไม่ได้เปิดแค่ IDE และโปรแกรมที่เราเขียน แต่เราจะต้องเปิด Stackoverflow ในการทำงานด้วย RAM 8 GB อาจจะเปิด Google Chrome ไม่พอ ส่วน Storage อาจจะโดดไป 1 TB เลยก็ได้ เผื่อเราจะเอา Project ทั้งหมดของเราทำงานในเครื่องของเราเลย เราว่า 1 TB สำหรับการทำงานพวกนี้ ถือว่าก็เยอะมาก ๆ แล้วนะ

แต่ถ้าใครที่บอกว่า เน้นการทำงาน Multithread แบบหนักมาก ๆ เราแนะนำให้โดดขึ้นไปเล่นพวก M1 Pro ที่มี CPU 10-Core และ GPU 16 Core มันน่าจะเป็นช่วงที่โอเคมาก ๆ สำหรับการทำงานที่ใช้ CPU เยอะ ๆ ถ้ามากกว่านี้มันก็ไม่มีผลอะไร เพราะ CPU มันคือตัวเดียวกัน ไม่ได้มีอะไรเปลี่ยนเลย หรือถ้าเราบอกว่า เราจะต้องเปิดพวกโปรแกรมอื่น ๆ โดยเฉพาะ Figma อันนี้เรียกได้ว่า นัง ตัว ดีย์ !!!! มันจะกิน RAM อะไรได้ขนาดนั้น ถ้าเราทำงานกับพวกนี้ เราแนะนำให้ไปเล่น RAM 32 GB ไปเลย เดือด ๆ แต่การข้ามไป 64 GB เราเลยเราว่าไม่มีความจำเป็นเลยในการทำงานพวก Software Development นะ

ส่วนคนที่ทำเกมทั้งหลาย เราว่าไม่ต้องมอง M1 เลยก็ได้ ไปล่อพวก M1 Pro และ Max เลย เพราะงานที่ทำ น่าจะต้องการ การใช้งาน GPU ที่สูงกว่าการเขียนเว็บ หรือ App ทั่ว ๆ ไปแน่นอน ทำให้การเพิ่ม GPU Core เข้าไปมันคุ้มค่ามาก ๆ ทำให้เราทำงานได้เร็วขึ้นได้จริง ๆ

สรุป

เวลาผ่านไป 1 ปีหลังจากที่ Apple Silicon ตัวแรกอย่าง M1 ออกมา พวกเรื่องของ Software Compatibility มันก็ดีขึ้นเรื่อย ๆ จนตอนนี้เรียกได้ว่า งานส่วนใหญ่ที่เราทำโดยเฉพาะพวก Software Development แทบจะเรียกได้ว่า Support แทบจะ 100% ของที่ Intel Mac ทำได้แล้วละ สุดท้ายเลยทำให้ Mac ที่รัน Apple Silicon ไม่ว่าจะเป็นตัวไหน เราว่ามันก็น่าเล่นหมดเลยถ้าเราทำงานกับพวก Apple Silicon