Blink, אמולטור x86-64 להרצת יישומי לינוקס שהורכבו על ארכיטקטורות אחרות

למצמץ

blink הוא מכונה וירטואלית המריץ תוכניות x86-64-linux במערכות הפעלה שונות

לאחרונה, החדשות של ה שחרור הגרסה הגדולה הראשונה של פרויקט Blink, שהוא אמולטור מעבד x86-64 המאפשר להריץ יישומי לינוקס שנוצרו באופן סטטי ודינמי במכונה וירטואלית עם מעבד אמולציה.

ראוי להזכיר שהפרויקט פותח על ידי מחברם של פיתוחים כמו ספריית Cosmopolitan C, יציאה למנגנון בידוד המחויבות עבור לינוקס ומערכת הקבצים האוניברסלית של Redbean.

מבחינת פונקציונליות, מצמוץ נראה כמו הפקודה qemu-x86_64, אבל שונה מ-QEMU בעיצוב קומפקטי יותר ובעלייה משמעותית בביצועים. לדוגמה, קובץ ההפעלה של Blink הוא רק 220 KB במקום 4 MB עבור qemu-x86_64, ו מבחינת ביצועים בהפעלת המבחן באמולטור GCC, בלינק מנצח את QEMU פעמיים.

עם Blink, תוכניות לינוקס שנערכו עבור ארכיטקטורת x86-64 יכולות לפעול על מערכות הפעלה אחרות תואמות POSIX (macOS, FreeBSD, NetBSD, OpenBSD, Cygwin) ועל חומרה עם ארכיטקטורות חומרה אחרות (x86, ARM, RISC-V, MIPS, PowerPC, s390x).

החדשות העיקריות של בלינק

שחרור גרסה 1.0 בולט בכך שהוא בעצם בינארי של 220kb סטטי נטול תלות המיישמת כ-600 הוראות x86 ו-180 קריאות מערכת לינוקס, מה שהופך את Blink די טוב בהפעלת תוכניות שורת פקודה פשוטות.

כדי להבטיח ביצועים גבוהים, נעשה שימוש במהדר JIT, הממיר את הוראות המקור לקוד מכונה עבור פלטפורמת המטרה תוך כדי תנועה. הפעלה ישירה על האמולטור של קבצי הפעלה בפורמטים ELF, PE (ניתן להפעיל) ו-bin (Flat Executable), הידור עם ספריות C הסטנדרטיות Cosmopolitan, Glibc ו-Musl נתמכת.

ל-Blink יש JIT מהיר שבמקרים מסוימים הוא מהיר פי 2 מ-Qemu למקרי שימוש. הסיבה לכך היא של-Blink יש JIT בסיסי שיוצר במהירות קוד באמצעות DSL בסגנון printf. כלומר ל-Blink יש בסיס קוד נגיש מכיוון שיש לנו רק 63 שורות של קוד ANSI C500. נכון לעכשיו, Blink אפילו לא מנסה לבצע אופטימיזציות, מה שהופך את הפרויקט הזה לתחום חדש לגמרי עבור אלגוריתמים.

מוזכר ש- Blink עובד הכי טוב עבור תוכניות שורת פקודה, אם כי ל- Blink יש גם תמיכה מסוימת לחיקוי יישומי GUI. בניגוד ל-qemu-user (שפועל רק על לינוקס), ניתן להריץ את Blink על מערכות הפעלה אחרות, מכיוון שישנה יכולת להדר את Blink ב-Cygwin (Windows) ואז להפעיל את Bash בתוך chroot של Alpine Linux. .

Blink מחקה את ארץ המשתמשים של לינוקס בצורה מספיק טובה כדי לשטות ב-neofetch, למרות ש-Blink הוא רק קובץ הפעלה ללא תלות של 250kb.

ראוי להזכיר ש-Blink עובד היטב גם על Apple Silicon, שכן למשל הוא יכול להערים על Neofetch לחשוב ש-MacOS M1 הוא Alpine x86_64.

בנוסף, בהתבסס על Blink, כלי העזר של blinkenlights נמצא בפיתוח, המספק ממשק לצפייה בביצוע תוכניות וניתוח תוכן הזיכרון. השירות יכול לשמש כ-debugger התומך במצב ניפוי הפוך (Reverse Debugging) ומאפשר לך לחזור אחורה בהיסטוריית הביצוע ולחזור לנקודה שבוצעה קודם לכן.

התכונה הטובה ביותר ש-Blinkenlights TUI מציעה היא איתור באגים הפוך. בהודעת השחרור, מוזכר שאתה רק צריך לגלול את הגלגל על ​​מסך הבנייה. מצמוץ גם מתאר את תכונות התוכנית שלך בזמן אמת אם תלחץ על מקש p. אתה יכול גם לשלוט בגלגל מחבת הזיכרון כדי להקטין את הזיכרון באמצעות ליבה.

בסופו של דבר אם אתה רוצה לדעת יותר על איך Blink עובד, אתה יכול לעשות את זה מתוך הקישור הבא.

קבל בלינק

למי שמעוניין להתנסות ב-blink, כדאי לדעת שההידור שלו פשוט ביותר, צריך רק להשיג את קוד המקור שלו, הם יכולים לעשות זאת מהקישור הבא או ממסוף על ידי הקלדת הפקודה הבאה :

wget https://github.com/jart/blink/releases/download/1.0.0/blink-1.0.0.tar.gz
tar xvzf blink-1.0.0.tar.gz
cd blink-1.0.0
./configure MODE=tiny
make -j8 MODE=tiny o/tiny/x86_64/blink/blink
o/third_party/gcc/x86_64/bin/x86_64-linux-musl-strip o/tiny/x86_64/blink/blink
o/tiny/x86_64/blink/blink -v