How to Run POSIX Apps in a Minimal Picoprocess Jon Howell, Bryan Parno, John R

Total Page:16

File Type:pdf, Size:1020Kb

How to Run POSIX Apps in a Minimal Picoprocess Jon Howell, Bryan Parno, John R How to Run POSIX Apps in a Minimal Picoprocess Jon Howell, Bryan Parno, John R. Douceur Microsoft Research, Redmond, WA Abstract Libraries We envision a future where Web, mobile, and desktop Application Function # Examples applications are delivered as isolated, complete software Abiword word processor 63 Pango,Freetype stacks to a minimal, secure client host. This shift imbues Gimp raster graphics 55 Gtk,Gdk Gnucash personal finances 101 Gnome,Enchant app vendors with full autonomy to maintain their apps’ Gnumeric spreadsheet 54 Gtk,Gdk integrity. Achieving this goal requires shifting complex Hyperoid video game 6 svgalib behavior out of the client platform and into the vendors’ Inkscape vector drawing 96 Magick,Gnome isolated apps. We ported rich, interactive POSIX apps, Marble 3D globe 73 KDE, Qt such as Gimp and Inkscape, to a spartan host platform. Midori HTML/JS renderer 74 webkit We describe this effort in sufficient detail to support re- producibility. Table 1: A variety of rich, functional apps transplanted to run in a minimal native picoprocess. While these 1 Introduction apps are nearly fully functional, plugins that depend on fork() are not yet supported (§3.9). Numerous academic systems [5, 11, 13, 15, 19, 22, 25–28, 31] and deployed systems [1–3, 23] have started pushing towards a world in which Web, mobile, and multaneously [16]. It pushes the minimal client host in- desktop applications are strongly isolated by the client terface to an extreme, proposing a client host without kernel. A common theme in this work is that guarantee- TCP, a file system or even storage, and with a UI con- ing strong isolation requires simplifying the client, since strained to simple pixel blitting (i.e., copying pixel arrays complexity tends to breed vulnerability. to the screen). In support of rich apps, Embassies’s mini- Complexity evicted from the client kernel takes up res- mal interface specifies execution of native binary code. idence in the apps themselves. This shift is beneficial: It Native code is an important practical choice, because, lets each app vendor decide independently which com- we assert, it is the lack of native code that has forced plexity is worth the risk of vulnerability, and one ven- each prior system based on language safety to evolve a dor’s decision in favor of complexity does not undermine complex trusted interface that provides access to native another’s decision to favor security. Of course, requiring libraries [8, 10, 17, 20]. This complexity undermines the each app vendor to implement a complete software stack intent to provide strong security. is impractical, so we expect this complexity to migrate to While native code is a target that every compiler can app frameworks that app vendors can choose among, just hit, it seems daunting to port arbitrary POSIX apps to as web developers choose among an ever evolving set of such a minimal interface. Such apps expect to run on a app frameworks on the server. complex host with hundreds of system calls and dozens The minimality of the client interface must not inhibit of system services, reflecting decades of development. the richness required by applications such as desktop However, our experience suggests this task is far eas- productivity apps. New client application models often ier than one might expect. Interactive apps use relatively fail due to the burden of migrating every app–and ev- little of the complexity available in modern host plat- ery library–to run under a new model. Thus, we argue forms. More importantly, rather than alter the app, the that shifting app delivery to a minimal-client model re- functions that are required can often be emulated behind quires an inexpensive app migration path from complex- the POSIX interface. This technique works without even host frameworks such as POSIX and Windows. recompiling the hundreds of libraries involved. The em- On the other hand, support for richness should not sac- ulation work can be shared easily across many applica- rifice the small size and tight specification of the isolation tions, making the porting work scalable. The broad se- interface. The web’s current client execution interface lection of rich apps that our system supports (see Table 1) has repeatedly failed to achieve strong app isolation, due demonstrates the generality of the approach. to an interface bloated with HTML, DOM, JPG, PNG, Contributions. This paper demonstrates the tractability JavaScript, Flash, etc. in pursuit of richness. of porting rich POSIX apps to a minimal environment, The recent Embassies system provides a concrete ex- thus enabling them to run on a multitude of minimal ample of how to achieve both security and richness si- client hosts [13, 16, 18, 22, 31]. We give a full account- USENIX Association 2013 USENIX Annual Technical Conference (USENIX ATC ’13) 321 ing of the porting task, including which functionality is specific secret. Apps use this key, along with cryp- required and where corners can be cut. This includes tographic libraries, to store and recover private in- low-level details, such as an exhaustive list of syscalls formation despite starting from a public binary. handled, to enable reproducibility and to eliminate any Communication. All communication outside the pro- ambiguity about complexity hidden under the hood. Ul- cess, whether IPC to another process on the local ma- timately, we hope that this will expedite other efforts to chine, or remote to an Internet host, follows IP seman- adopt these techniques and hence achieve rich applica- tics: Data is transferred by value (a logical copy), so tions atop minimal, strongly-isolating client kernels. that the suspicious recipient needn’t worry about concur- rent modification; addressing is non-authoritative; deliv- 2 Background: Minimal Client Facilities ery admits loss and duplication; packet privacy and in- In this work, we aim to transplant apps from a rich tegrity are not guaranteed. Just like servers on the Inter- POSIX interface to a minimal client kernel. To ground net, apps build up integrity and privacy themselves using the discussion, we target the minimal Embassies pico- cryptography. To underscore these semantics, all com- process interface [16], since it takes minimality to an munication in Embassies–remote or local–is done via IP. extreme. If we can port an app to Embassies, we can • get addresses assigns the process one IPv4 certainly port it to a client with a richer interface. and one IPv6 address. The Embassies application binary interface (ABI) pro- • allocate packet allocates memory for an out- vides execution primitives that support an app’s internal going packet; this allocation is distinguished from computation, cryptographic primitives to facilitate pri- allocate memory to enable zero-copy transfer. vacy and integrity, primitives for IPC and network com- • send packet delivers a packet, interpreting its munication, and user interface (UI) primitives for user argument as an IP header and payload. interaction. • receive packet returns an allocated and de- Execution. The execution primitives include: queued packet, or NULL if the queue is empty. • Calls to allocate memory and free memory. • free packet frees an allocated packet. To simplify the specification and to make the ABI User Interface. portable to most host environments, the app speci- • ui event returns a dequeued UI event (keystroke fies only the amount of memory required; it has no or pointer motion), or NULL if the queue is empty. control over the addresses returned by the allocator. • Some calls that manage viewports, letting them be • create thread accepts only the thread’s initial transferred among applications, or letting one ap- program counter and stack pointer; the application plication sublet a region of its viewport to another provides the stack and any execution context. application. In every case, even where nested, each • exit thread destroys the current thread. viewport is owned by a single app; no app can in- • A simplified futex-like [6] synchronization schedul- spect or modify the pixels of another app’s view- ing primitive, the zutex. zutex wake is a race- port. Details can be found elsewhere [16]. free scheduling primitive that supports app-level ef- • map canvas allocates a framebuffer to back a ficient synchronization primitives. The correspond- viewport. This allocation is distinguished from ing zutex wait is the only blocking call in the allocate memory to enable fast pixel blitting. ABI; it allows an app to yield the processor. • update canvas informs the client kernel that a • clock returns a rough notion of wall-clock time. region of the framebuffer has been updated, and that • set timer sets a timer, in clock coordinates, that its pixels should be blitted to the display. wakes a zutex on its expiration. Each picoprocess These calls comprise the entire Embassies ABI; all of has only one timer; the app must multiplex it. the functionality described in the rest of the paper is im- • get alarms returns a list of three distin- plemented in terms of these primitives. guished zutexes representing external events, one for each of receive packet, ui event, and 3 The POSIX Emulator timer expired. Waiting on these zutexes is how A conventional POSIX application employs dozens of threads block on external activity. libraries, access to a rich system call interface, and by • A call to create a new picoprocess. way of those system calls, access to other rich services, such as the X server’s graphics functions and the dbus Cryptographic Infrastructure. desktop configuration object broker. • random provides a supply of cryptographically To execute applications expecting this rich POSIX en- strong entropy. vironment, our POSIX emulator cleverly repurposes ex- • app key provides a machine-specific, application- isting libraries and programs atop the execution environ- 2 322 2013 USENIX Annual Technical Conference (USENIX ATC ’13) USENIX Association stack allocations heap allocations gimp ..
Recommended publications
  • Veusz Documentation Release 3.0
    Veusz Documentation Release 3.0 Jeremy Sanders Jun 09, 2018 CONTENTS 1 Introduction 3 1.1 Veusz...................................................3 1.2 Installation................................................3 1.3 Getting started..............................................3 1.4 Terminology...............................................3 1.4.1 Widget.............................................3 1.4.2 Settings: properties and formatting...............................6 1.4.3 Datasets.............................................7 1.4.4 Text...............................................7 1.4.5 Measurements..........................................8 1.4.6 Color theme...........................................8 1.4.7 Axis numeric scales.......................................8 1.4.8 Three dimensional (3D) plots..................................9 1.5 The main window............................................ 10 1.6 My first plot............................................... 11 2 Reading data 13 2.1 Standard text import........................................... 13 2.1.1 Data types in text import.................................... 14 2.1.2 Descriptors........................................... 14 2.1.3 Descriptor examples...................................... 15 2.2 CSV files................................................. 15 2.3 HDF5 files................................................ 16 2.3.1 Error bars............................................ 16 2.3.2 Slices.............................................. 16 2.3.3 2D data ranges........................................
    [Show full text]
  • Enchant 1300
    ENCHANT 1300 Quick Start Guide For more information, please visit harmankardon.com / 1. WHAT’S IN THE BOX Soundbar Remote Control VOL Power Cables* HDMI Cable AUX cable Optical Cable (4ft, 1200mm) (4ft, 1200mm) (4ft, 1200mm) (4ft, 1200mm) Wall-Mount Brackets Product Information & Wall-mounted guide * Power cable quantities vary by region / 2. PLACE YOUR SOUNDBAR 2a. Place the soundbar on the table TV 2B. Wall mount the soundbar Use tape to stick the wall-mounted paper guide on the wall, push a pen tip through the center to mark the wall-mounted bracket location and remove the paper. 1 TV WALLMOUNTED PAPER GUIDE Using the appropriate anchors, screw the wall mount brackets on the pen mark; Fix the screws at the back of soundbar; then hook the soundbar on the wall. 3 2 x3 4 TV / 3. CONNECT YOUR SOUNDBAR 3a. Connect to your TV Option 1 (Best): HDMI TV HDMI OUT HDMI (ARC) (TV ARC) Option 2: OPTICAL TV OPTICAL OUT OPTICAL IN 3b. Connect to other devices HDMI 1 HDMI 2 HDMI 3 HDMI OUT / 4. POWER YOUR SYSTEM 1 2 3 After the power cord is plugged in, the soundbar will take about 30 seconds to start up and then will enter standby mode, ready to use. / 5. CONNECT TO WI-FI 1 2 3 HK ENCHANT 1300 Once the soundbar connects to the internet for the first time, it may detect a software update to improve performance. This update may take a few minutes to complete. / 6. CONTROL YOUR SOUNDBAR 6a. Top Panel Volume Volume Power Down Up Source Display 6b.
    [Show full text]
  • Dockerdocker
    X86 Exagear Emulation • Android Gaming • Meta Package Installation Year Two Issue #14 Feb 2015 ODROIDMagazine DockerDocker OS Spotlight: Deploying ready-to-use Ubuntu Studio containers for running complex system environments • Interfacing ODROID-C1 with 16 Channel Relay Play with the Weather Board • ODROID-C1 Minimal Install • Device Configuration for Android Development • Remote Desktop using Guacamole What we stand for. We strive to symbolize the edge of technology, future, youth, humanity, and engineering. Our philosophy is based on Developers. And our efforts to keep close relationships with developers around the world. For that, you can always count on having the quality and sophistication that is the hallmark of our products. Simple, modern and distinctive. So you can have the best to accomplish everything you can dream of. We are now shipping the ODROID U3 devices to EU countries! Come and visit our online store to shop! Address: Max-Pollin-Straße 1 85104 Pförring Germany Telephone & Fax phone : +49 (0) 8403 / 920-920 email : [email protected] Our ODROID products can be found at http://bit.ly/1tXPXwe EDITORIAL ow that ODROID Magazine is in its second year, we’ve ex- panded into several social networks in order to make it Neasier for you to ask questions, suggest topics, send article submissions, and be notified whenever the latest issue has been posted. Check out our Google+ page at http://bit.ly/1D7ds9u, our Reddit forum at http://bit. ly/1DyClsP, and our Hardkernel subforum at http://bit.ly/1E66Tm6. If you’ve been following the recent Docker trends, you’ll be excited to find out about some of the pre-built Docker images available for the ODROID, detailed in the second part of our Docker series that began last month.
    [Show full text]
  • Configuring DNS
    Configuring DNS The Domain Name System (DNS) is a distributed database in which you can map hostnames to IP addresses through the DNS protocol from a DNS server. Each unique IP address can have an associated hostname. The Cisco IOS software maintains a cache of hostname-to-address mappings for use by the connect, telnet, and ping EXEC commands, and related Telnet support operations. This cache speeds the process of converting names to addresses. Note You can specify IPv4 and IPv6 addresses while performing various tasks in this feature. The resource record type AAAA is used to map a domain name to an IPv6 address. The IP6.ARPA domain is defined to look up a record given an IPv6 address. • Finding Feature Information, page 1 • Prerequisites for Configuring DNS, page 2 • Information About DNS, page 2 • How to Configure DNS, page 4 • Configuration Examples for DNS, page 13 • Additional References, page 14 • Feature Information for DNS, page 15 Finding Feature Information Your software release may not support all the features documented in this module. For the latest caveats and feature information, see Bug Search Tool and the release notes for your platform and software release. To find information about the features documented in this module, and to see a list of the releases in which each feature is supported, see the feature information table at the end of this module. Use Cisco Feature Navigator to find information about platform support and Cisco software image support. To access Cisco Feature Navigator, go to www.cisco.com/go/cfn. An account on Cisco.com is not required.
    [Show full text]
  • Testing-Prepare.Pdf
    Prepare Update your system so you can connect to the staging server to perform testing – required for all users EXCEPT “new users.” If you are not certain how to complete the steps listed in Prepare, you should abort testing efforts. Breaking your “hosts” file may prevent applications that use the Internet, such as your Web browser, from functioning properly. Also note that this will make non-CMS www.ndsu.edu sites unavailable while you are testing until you perform the clean-up steps on page 11 of this packet. Windows XP 1. Close all browser windows 2. Open My Computer 3. Browse to Local Disk (C:) > WINDOWS > system32 > drivers > etc 4. Double-click hosts 5. In the Open With dialog window, select Notepad and click OK 6. At the end of the file, AFTER 127.0.0.1 localhost, add a new line with the following entry 134.129.111.243 www.ndsu.edu workspaces.ndsu.edu An example of what the file should look like follows these directions Note that if you usually sign in somewhere other than “workspaces.ndsu.edu” you should add that address to the end of this list, for example like 134.129.111.243 www.ndsu.edu workspaces.ndsu.edu english.ndsu.edu 7. Save the file Remember to complete the clean-up steps on page 11 of this packet when you are done testing Windows Vista 1. Close all browser windows 2. Click the Start menu > All Programs > Accessories > and RIGHT-CLICK Notepad 3. Choose Run as administrator 4. In the User Account Control dialog, click Continue or if you are not an administrator, provide a password for an administrator account and click OK 5.
    [Show full text]
  • Effects and Opportunities of Native Code Extensions For
    Effects and Opportunities of Native Code Extensions for Computationally Demanding Web Applications DISSERTATION zur Erlangung des akademischen Grades Dr. Phil. im Fach Bibliotheks- und Informationswissenschaft eingereicht an der Philosophischen Fakultät I Humboldt-Universität zu Berlin von Dipl. Inform. Dennis Jarosch Präsident der Humboldt-Universität zu Berlin: Prof. Dr. Jan-Hendrik Olbertz Dekan der Philosophischen Fakultät I: Prof. Michael Seadle, Ph.D. Gutachter: 1. Prof. Dr. Robert Funk 2. Prof. Michael Seadle, Ph.D. eingereicht am: 28.10.2011 Tag der mündlichen Prüfung: 16.12.2011 Abstract The World Wide Web is amidst a transition from interactive websites to web applications. An increasing number of users perform their daily computing tasks entirely within the web browser — turning the Web into an important platform for application development. The Web as a platform, however, lacks the computational performance of native applications. This problem has motivated the inception of Microsoft Xax and Google Native Client (NaCl), two independent projects that fa- cilitate the development of native web applications. Native web applications allow the extension of conventional web applications with compiled native code, while maintaining operating system portability. This dissertation determines the bene- fits and drawbacks of native web applications. It also addresses the question how the performance of JavaScript web applications compares to that of native appli- cations and native web applications. Four application benchmarks are introduced that focus on different performance aspects: number crunching (serial and parallel), 3D graphics performance, and data processing. A performance analysis is under- taken in order to determine and compare the performance characteristics of native C applications, JavaScript web applications, and NaCl native web applications.
    [Show full text]
  • Javascript and the DOM
    Javascript and the DOM 1 Introduzione alla programmazione web – Marco Ronchetti 2020 – Università di Trento The web architecture with smart browser The web programmer also writes Programs which run on the browser. Which language? Javascript! HTTP Get + params File System Smart browser Server httpd Cgi-bin Internet Query SQL Client process DB Data Evolution 3: execute code also on client! (How ?) Javascript and the DOM 1- Adding dynamic behaviour to HTML 3 Introduzione alla programmazione web – Marco Ronchetti 2020 – Università di Trento Example 1: onmouseover, onmouseout <!DOCTYPE html> <html> <head> <title>Dynamic behaviour</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <div onmouseover="this.style.color = 'red'" onmouseout="this.style.color = 'green'"> I can change my colour!</div> </body> </html> JAVASCRIPT The dynamic behaviour is on the client side! (The file can be loaded locally) <body> <div Example 2: onmouseover, onmouseout onmouseover="this.style.background='orange'; this.style.color = 'blue';" onmouseout=" this.innerText='and my text and position too!'; this.style.position='absolute'; this.style.left='100px’; this.style.top='150px'; this.style.borderStyle='ridge'; this.style.borderColor='blue'; this.style.fontSize='24pt';"> I can change my colour... </div> </body > JavaScript is event-based UiEvents: These event objects iherits the properties of the UiEvent: • The FocusEvent • The InputEvent • The KeyboardEvent • The MouseEvent • The TouchEvent • The WheelEvent See https://www.w3schools.com/jsref/obj_uievent.asp Test and Gym JAVASCRIPT HTML HEAD HTML BODY CSS https://www.jdoodle.com/html-css-javascript-online-editor/ Javascript and the DOM 2- Introduction to the language 8 Introduzione alla programmazione web – Marco Ronchetti 2020 – Università di Trento JavaScript History • JavaScript was born as Mocha, then “LiveScript” at the beginning of the 94’s.
    [Show full text]
  • UNIVERSITY of CALIFORNIA SANTA CRUZ UNDERSTANDING and SIMULATING SOFTWARE EVOLUTION a Dissertation Submitted in Partial Satisfac
    UNIVERSITY OF CALIFORNIA SANTA CRUZ UNDERSTANDING AND SIMULATING SOFTWARE EVOLUTION A dissertation submitted in partial satisfaction of the requirements for the degree of DOCTOR OF PHILOSOPHY in COMPUTER SCIENCE by Zhongpeng Lin December 2015 The Dissertation of Zhongpeng Lin is approved: Prof. E. James Whitehead, Jr., Chair Asst. Prof. Seshadhri Comandur Prof. Timothy J. Menzies Tyrus Miller Vice Provost and Dean of Graduate Studies Copyright c by Zhongpeng Lin 2015 Table of Contents List of Figures v List of Tables vii Abstract ix Dedication xi Acknowledgments xii 1 Introduction 1 1.1 Emergent Phenomena in Software . 1 1.2 Simulation of Software Evolution . 3 1.3 Research Outline . 4 2 Power Law and Complex Networks 6 2.1 Power Law . 6 2.2 Complex Networks . 9 2.3 Empirical Studies of Software Evolution . 12 2.4 Summary . 17 3 Data Set and AST Differences 19 3.1 Data Set . 19 3.2 ChangeDistiller . 21 3.3 Data Collection Work Flow . 23 4 Change Size in Four Open Source Software Projects 24 4.1 Methodology . 25 4.2 Commit Size . 27 4.3 Monthly Change Size . 32 4.4 Summary . 36 iii 5 Generative Models for Power Law and Complex Networks 38 5.1 Generative Models for Power Law . 38 5.1.1 Preferential Attachment . 41 5.1.2 Self-organized Criticality . 42 5.2 Generative Models for Complex Networks . 50 6 Simulating SOC and Preferential Attachment in Software Evolution 53 6.1 Preferential Attachment . 54 6.2 Self-organized Criticality . 56 6.3 Simulation Model . 57 6.4 Experiment Setup .
    [Show full text]
  • The Elinks Manual the Elinks Manual Table of Contents Preface
    The ELinks Manual The ELinks Manual Table of Contents Preface.......................................................................................................................................................ix 1. Getting ELinks up and running...........................................................................................................1 1.1. Building and Installing ELinks...................................................................................................1 1.2. Requirements..............................................................................................................................1 1.3. Recommended Libraries and Programs......................................................................................1 1.4. Further reading............................................................................................................................2 1.5. Tips to obtain a very small static elinks binary...........................................................................2 1.6. ECMAScript support?!...............................................................................................................4 1.6.1. Ok, so how to get the ECMAScript support working?...................................................4 1.6.2. The ECMAScript support is buggy! Shall I blame Mozilla people?..............................6 1.6.3. Now, I would still like NJS or a new JS engine from scratch. .....................................6 1.7. Feature configuration file (features.conf).............................................................................7
    [Show full text]
  • Current Status of Win32 Gdk Implementation
    Current status of Win32 Gdk implementation Bertrand Bellenot - [email protected] Features (recall) ! Same environment on every system : ! Same look and feel on every platform. ! Simplify the code maintenance : ! No need to care about a « windows specific code ». ! Simplify functionality extension : ! No need to implement the code twice, once for windows and once for other OS. ! Only use TVirtualX. Actual Status (recall) ! The actual code uses a modified version of gdk and glib, the GIMP low-level libraries ported on win32. In practice, this means that we only need to link with gdk.lib, glib.lib and iconv.dll as additional libraries (hopefully less in the future). These libraries are under LGPL, so there are no licensing issues in using and distributing them. ! As original version of gdk was not doing everything needed by root (as font orientation!), I did have to slightly modify the original code. Points fixed since last year ! Some characters were not displayed. " ! Some problems with icon’s transparency. " ! The event handling was not perfect. " ! OpenGL was not working. " Events handling architecture (actual) TSystem CINT TGClient TVirtualX Gdk Threads issue ! From gdk developper FAQ : ! Without some major restructuring in GDK-Win32, I don't think there is any chance that GTK+ would work, in general, in a multi-threaded app, with different threads accessing windows created by other threads. ! One problem is that each thread in Windows have its own message queue. GDK-Win32 currently uses just one "message pump" in the main thread. It will never see messages for windows created by other threads. Threads issue ! As gdk is not thread safe, I had to create a separate thread from within the gdk calls are made.
    [Show full text]
  • Lightweight Distros on Test
    GROUP TEST LIGHTWEIGHT DISTROS LIGHTWEIGHT DISTROS GROUP TEST Mayank Sharma is on the lookout for distros tailor made to infuse life into his ageing computers. On Test Lightweight distros here has always been a some text editing, and watch some Linux Lite demand for lightweight videos. These users don’t need URL www.linuxliteos.com Talternatives both for the latest multi-core machines VERSION 2.0 individual apps and for complete loaded with several gigabytes of DESKTOP Xfce distributions. But the recent advent RAM or even a dedicated graphics Does the second version of the distro of feature-rich resource-hungry card. However, chances are their does enough to justify its title? software has reinvigorated efforts hardware isn’t supported by the to put those old, otherwise obsolete latest kernel, which keeps dropping WattOS machines to good use. support for older hardware that is URL www.planetwatt.com For a long time the primary no longer in vogue, such as dial-up VERSION R8 migrators to Linux were people modems. Back in 2012, support DESKTOP LXDE, Mate, Openbox who had fallen prey to the easily for the i386 chip was dropped from Has switching the base distro from exploitable nature of proprietary the kernel and some distros, like Ubuntu to Debian made any difference? operating systems. Of late though CentOS, have gone one step ahead we’re getting a whole new set of and dropped support for the 32-bit SparkyLinux users who come along with their architecture entirely. healthy and functional computers URL www.sparkylinux.org that just can’t power the newer VERSION 3.5 New life DESKTOP LXDE, Mate, Xfce and others release of Windows.
    [Show full text]
  • The Glib/GTK+ Development Platform
    The GLib/GTK+ Development Platform A Getting Started Guide Version 0.8 Sébastien Wilmet March 29, 2019 Contents 1 Introduction 3 1.1 License . 3 1.2 Financial Support . 3 1.3 Todo List for this Book and a Quick 2019 Update . 4 1.4 What is GLib and GTK+? . 4 1.5 The GNOME Desktop . 5 1.6 Prerequisites . 6 1.7 Why and When Using the C Language? . 7 1.7.1 Separate the Backend from the Frontend . 7 1.7.2 Other Aspects to Keep in Mind . 8 1.8 Learning Path . 9 1.9 The Development Environment . 10 1.10 Acknowledgments . 10 I GLib, the Core Library 11 2 GLib, the Core Library 12 2.1 Basics . 13 2.1.1 Type Definitions . 13 2.1.2 Frequently Used Macros . 13 2.1.3 Debugging Macros . 14 2.1.4 Memory . 16 2.1.5 String Handling . 18 2.2 Data Structures . 20 2.2.1 Lists . 20 2.2.2 Trees . 24 2.2.3 Hash Tables . 29 2.3 The Main Event Loop . 31 2.4 Other Features . 33 II Object-Oriented Programming in C 35 3 Semi-Object-Oriented Programming in C 37 3.1 Header Example . 37 3.1.1 Project Namespace . 37 3.1.2 Class Namespace . 39 3.1.3 Lowercase, Uppercase or CamelCase? . 39 3.1.4 Include Guard . 39 3.1.5 C++ Support . 39 1 3.1.6 #include . 39 3.1.7 Type Definition . 40 3.1.8 Object Constructor . 40 3.1.9 Object Destructor .
    [Show full text]