Utilizing Rust Programming Language for EFI-Based Bootloader Design

Total Page:16

File Type:pdf, Size:1020Kb

Utilizing Rust Programming Language for EFI-Based Bootloader Design Utilizing Rust Programming Language for EFI-Based Bootloader Design Tun¸cUzlu and Ediz S¸aykol Beykent University, Department of Computer Engineering, Ayaza˘ga,34396, Istanbul,_ Turkey [email protected]; [email protected] in Servo, Mozilla Foundations massively parallel web browsing engine, which is unique because of its concur- Abstract rent process rendering and compositing steps [JML15]. Rust, as being a systems programming language, has Rust, as being a systems programming lan- ability to operate at the lowest level without any run- guage, offers memory safety with zero cost and time penalty, like C, C++ or Cyclone, but offers com- without any runtime penalty unlike other lan- plete memory safety, unlike these languages. Systems guages like C, C++ or Cyclone. System pro- programming languages are crucial for time criticial gramming languages are mainly used for low tasks like signal processing and also for bare-metal op- level tasks such as design of operating system erations such as design of operating system compo- components, web browsers, game engines and nents, web browsers, game engines where raw hard- time critical missions like signal processing. ware access is a must. Existing systems languages are Main disadvantages of the existing systems memory unsafe and extremely complicated because of languages are being memory unsafe and hav- their low level nature. ing low level design. On the other hand, Rust Systems programming languages are considered es- offers high level language semantics, advanced sential for embedded systems because of low mem- standard library with modern skill set includ- ory availability and exiguous processing power [HL15]. ing most of the features and functional ele- The main reason is the lack of garbage collector which ments of widely-used programming languages. causes non-deterministic delays [LAC+15]. Garbage Moreover, Rust can be used as a scripting lan- collectors provide very safe memory management, but guage like Python, and a functional language poorly manages the memory space and unpredictably like Haskell or any other low level procedural runs at the background. This design choice also affects language like C or C++, since Rust is both energy consumption which is very important for em- imperative and functional having no garbage bedded systems and changes operating system design collector. These design choices make Rust a paradigm [LMP+05]. suitable match for low level tasks via includ- ing high level scalability and maintainability. On the other hand, Rust is both imperative and Meanwhile, EFI (Extensible Firmware Inter- functional language. Although including different fla- face) specification is aimed to remove the lim- vors, Rust is highly scalable with capable standard itations of legacy hardware. Hence, we present library comparable to high level languages. Rich our analysis of utilizing Rust language on EFI- language semantics and haveing no garbage collector based bootloader design for x86 architecture, makes Rust suitable match for low level tasks while to make it useful for both practitioners and having high maintainability level. Moreover, Rust can technology developers. be used as a scripting language like Python or as a functional language like Haskell because of its inher- ited skill set has been mostly adpoted from modern 1 Introduction languages. Rust programming language has been designed by C++ is the most powerful systems programming Graydon Hoare and currently it is actively being de- language today. Because of its multi paradigm de- veloped by Mozilla Foundation. It is also being used sign and zero cost runtime performance, it is widely used by numerous organizations and people with dif- tion. ferent backgrounds. C++ has features with compli- Rust ecosystem includes Rustc compiler but also a cated runtime support like RTTI and exceptions dis- very powerful package manager, Cargo with its registry abled for most bootloader applications. As it includes webpage for crates, Rustfmt for code formatting, and every element from its predecessor C language, it also Rustdoc. for automatic document generation. Cargo includes every memory safety pitfall from C. This vari- has very well dependency management as it offers ation makes C++ even more vulnerable to memory un- strict versions of dependencies to be defined. It allows safety especially architects with C background widely arbitrary flags to pass to Rustc, the Rust compiler, rely on these language elements. Cyclone, on the other but most importantly with target argument [HL15] it hand, developed as an extension to C language to pro- is possible to cross compile to another system differ- vide Rust-like memory safety mechanism with ability entiating from host operating system. There is also to port from C to Cyclone without much effort. How- features argument for conditional compiling. Cargo ever, this design choice caused the language semantics reads projects meta information from a Toml file which to become restrictive and unwieldy. is very much like JSON, but more suitable for human Another language which is popular and somehow editing, rather than data serialization. racing with Rust is Go language because of its low learning curve. Go is supported by Google and is a 2.1 Rust Programming Concepts high level language which can be compared to Python or Ruby. Go neither have generic types nor pro- Ownership is one of the most important language se- vides safety over its concurrency model, Goroutines. mantics of Rust. Variable bindings can have one Rust has generics with monomorphisation so they are unique owner. They can be moved, can be borrowed statically dispatched and has good runtime perfor- numerous times if they are not previously borrowed mance [Bal15]. as mutable, that can be happened only once. Own- Here, we present our analysis of utilizing Rust lan- ership also works on resources like files or sockets and guage on EFI-based bootloader design for x86 architec- across threads. Rust provides traits to offer functional- ture, to make it useful for both practitioners and tech- ity similar to inheritance [JML15]. For example, to du- nology developers. Our analysis in this paper starts plicate an object Rust have Clone trait [LAC+15] also with presenting Rust language basics in detail in Sec- there is Copy trait for bitwise copying. Anonymous tion 2. Then, bootloading basics is presented in Sec- closure functions are also defined in terms of traits in tion 3. Since the main idea behind using Rust is pro- Rust like Fn or FnMut depending on mutability and if gramming a critical-and-safe low-level task with high- the closure is called once it should be FnOnce. They level programming concepts, we found bootloader de- can not be used as a return value so they should be sign a typical application for this purpose, and discuss enclosed into a Box which allocates space from Heap design choices that make Rust suitable in Section 4. memory [Lig15]. Finally, Section 5 concludes our paper and states fu- Rust have Structs in a very similar way to C. The ture work. main difference is data structure itself may be pub- lic whereas its elements may be private in the code 2 Rust Language Details space. Rust offers algebraic Enum which is more func- tional and much more advanced compared to that of Rust is an open source programming language, includ- C++, which only has type checking. Option generic ing an issue system for bug reporting and separate type is a special Enum type with maybe characteris- RFC tracker for language standardization, which are tic. It is being used as a selector between a return located on Github repository. With the help of numer- value, Some, or an error value, Err (or absence None). ous contributors around the world, Rust provides pre- This Option and Error types are suitable for repre- compiled development environment for Linux, Win- senting Null pointers so that it is impossible Rust to dows and OS X. It is also possible to cross compile have Null pointer errors. This paradigm is also suit- Rust for Ios, Android, Rasperry Pi and other operating able for Null pointer optimization as Rust uses LLVM systems. As Rust is a separate development toolchain compiler infrastructure and benefits from same back- from operating system, it is radically closer to deter- end optimizations of C language family. Pointer safety ministic code generation process. Hence, Rust is com- is guaranteed with holding Lifetimes. Like type infer- pletely decoupled in this perspective. On the other ence, reference lifetimes can be guessed by Rust com- hand, languages like C or C++ depends on header piled and this is called lifetime elision. Sometimes ex- files and libraries through the operating system, lots plicit lifetime marks are required as references lifetime of applications along with various operating system must be equal or larger than its originating binding. distributions and updates might influence the collec- Concurrency is the core of Rust. Same owner- ship mechanism applies across threads and Rust offers audience. Like borrowing a master chefs knife, imper- thread safety mostly on compile time. Channel, for ative paradigm is powerful when used correctly, but example, allows data to be send safely across threads tend to fail because of its destructive nature on global if the type satisfy Send Marker trait. Markers are data [Oka99]. Rusts internals to enforce safety rules. Other impor- tant markers are Sync, can be shared across threads, Sized, type has a known size at compile time. When multiple threads need to modify same region of mem- 2.2 Comparing Rust with C and C++ ory classical lock mechanisms like Mutex or RWLock are provided. The key point is locking in Rust works on the data itself, not on the code. Software architects Rust is the remedy for numerous systems program- using C++ tries to prevent data race by locking the ming bugs by design.
Recommended publications
  • Mozilla Foundation and Subsidiary, December 31, 2018 and 2017
    MOZILLA FOUNDATION AND SUBSIDIARY DECEMBER 31, 2018 AND 2017 INDEPENDENT AUDITORS’ REPORT AND CONSOLIDATED FINANCIAL STATEMENTS Mozilla Foundation and Subsidiary Independent Auditors’ Report and Consolidated Financial Statements Independent Auditors’ Report 1 - 2 Consolidated Financial Statements Consolidated Statement of Financial Position 3 Consolidated Statement of Activities and Change in Net Assets 4 Consolidated Statement of Functional Expenses 5 Consolidated Statement of Cash Flows 6 Notes to Consolidated Financial Statements 7 - 27 Independent Auditors’ Report THE BOARD OF DIRECTORS MOZILLA FOUNDATION AND SUBSIDIARY Mountain View, California Report on the Consolidated Financial Statements We have audited the accompanying consolidated financial statements of MOZILLA FOUNDATION AND SUBSIDIARY (Mozilla) which comprise the consolidated statement of financial position as of December 31, 2018 and 2017, and the related consolidated statements of activities and change in net assets, and cash flows for the years then ended, the statement of functional expenses for the year ended December 31, 2018, and the related notes to the consolidated financial statements (collectively, the financial statements). Management’s Responsibility for the Consolidated Financial Statements Management is responsible for the preparation and fair presentation of these financial statements in accordance with accounting principles generally accepted in the United States of America; this includes the design, implementation, and maintenance of internal control relevant to the preparation and fair presentation of financial statements that are free from material misstatement, whether due to fraud or error. Auditors’ Responsibility Our responsibility is to express an opinion on these financial statements based on our audits. We conducted our audits in accordance with auditing standards generally accepted in the United States of America.
    [Show full text]
  • Web Browser a C-Class Article from Wikipedia, the Free Encyclopedia
    Web browser A C-class article from Wikipedia, the free encyclopedia A web browser or Internet browser is a software application for retrieving, presenting, and traversing information resources on the World Wide Web. An information resource is identified by a Uniform Resource Identifier (URI) and may be a web page, image, video, or other piece of content.[1] Hyperlinks present in resources enable users to easily navigate their browsers to related resources. Although browsers are primarily intended to access the World Wide Web, they can also be used to access information provided by Web servers in private networks or files in file systems. Some browsers can also be used to save information resources to file systems. Contents 1 History 2 Function 3 Features 3.1 User interface 3.2 Privacy and security 3.3 Standards support 4 See also 5 References 6 External links History Main article: History of the web browser The history of the Web browser dates back in to the late 1980s, when a variety of technologies laid the foundation for the first Web browser, WorldWideWeb, by Tim Berners-Lee in 1991. That browser brought together a variety of existing and new software and hardware technologies. Ted Nelson and Douglas Engelbart developed the concept of hypertext long before Berners-Lee and CERN. It became the core of the World Wide Web. Berners-Lee does acknowledge Engelbart's contribution. The introduction of the NCSA Mosaic Web browser in 1993 – one of the first graphical Web browsers – led to an explosion in Web use. Marc Andreessen, the leader of the Mosaic team at NCSA, soon started his own company, named Netscape, and released the Mosaic-influenced Netscape Navigator in 1994, which quickly became the world's most popular browser, accounting for 90% of all Web use at its peak (see usage share of web browsers).
    [Show full text]
  • Toolchains Instructor: Prabal Dutta Date: October 2, 2012
    EECS 373: Design of Microprocessor-Based Systems Fall 2012 Lecture 3: Toolchains Instructor: Prabal Dutta Date: October 2, 2012 Note: Unless otherwise specified, these notes assume: (i) an ARM Cortex-M3 processor operating in little endian mode; (ii) the ARM EABI application binary interface; and (iii) the GNU GCC toolchain. Toolchains A complete software toolchain includes programs to convert source code into binary machine code, link together separately assembled/compiled code modules, disassemble the binaries, and convert their formats. Binary program file (.bin) Assembly Object Executable files (.s) files (.o) image file objcopy ld (linker) as objdump (assembler) Memory layout Disassembled Linker code (.lst) script (.ld) Figure 0.1: Assembler Toolchain. A typical GNU (GNU's Not Unix) assembler toolchain includes several programs that interact as shown in Figure 0.1 and perform the following functions: • as is the assembler and it converts human-readable assembly language programs into binary machine language code. It typically takes as input .s assembly files and outputs .o object files. • ld is the linker and it is used to combine multiple object files by resolving their external symbol references and relocating their data sections, and outputting a single executable file. It typically takes as input .o object files and .ld linker scripts and outputs .out executable files. • objcopy is a translation utility that copies and converts the contents of an object file from one format (e.g. .out) another (e.g. .bin). • objdump is a disassembler but it can also display various other information about object files. It is often used to disassemble binary files (e.g.
    [Show full text]
  • Linux from Scratch Version 6.2
    Linux From Scratch Version 6.2 Gerard Beekmans Linux From Scratch: Version 6.2 by Gerard Beekmans Copyright © 1999–2006 Gerard Beekmans Copyright (c) 1999–2006, Gerard Beekmans All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: • Redistributions in any form must retain the above copyright notice, this list of conditions and the following disclaimer • Neither the name of “Linux From Scratch” nor the names of its contributors may be used to endorse or promote products derived from this material without specific prior written permission • Any material derived from Linux From Scratch must contain a reference to the “Linux From Scratch” project THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Linux From Scratch - Version 6.2 Table of Contents Preface
    [Show full text]
  • Internal Message
    Earlier today, Mozilla Corporation CEO and Mozilla Foundation Chairwoman Mitchell Baker sent the following message to Mozilla employees. We are making significant changes at Mozilla Corporation today. Pre-COVID, our plan for 2020 was a year of change: building a better internet by accelerating product value in Firefox, increasing innovation, and adjusting our finances to ensure financial stability over the long term. We started with immediate cost-saving measures such as pausing our hiring, reducing our wellness stipend and cancelling our All-Hands. But COVID-19 has accelerated the need and magnified the depth for these changes. Our pre-COVID plan is no longer workable. We have talked about the need for change — including the likelihood of layoffs — since the spring. Today these changes become real. We are also restructuring to put a crisper focus on new product development and go to market activities. In the long run, I am confident that the new organizational structure will serve our product and market impact goals well, but we will talk in detail about this in a bit. But, before that is the painful part. Yes — we need to reduce the size of our workforce. This is hard to internalize and I desperately wish there was some other way to set Mozilla up for success in building a better internet. I desperately wish that all those who choose Mozilla as an employer could stay as long as interest and skills connect. Unfortunately, we can’t make that happen today. We are reducing the size of the MoCo workforce by approximately 250 roles, including closing our current operations in Taipei, Taiwan.
    [Show full text]
  • Anatomy of Cross-Compilation Toolchains
    Embedded Linux Conference Europe 2016 Anatomy of cross-compilation toolchains Thomas Petazzoni free electrons [email protected] Artwork and Photography by Jason Freeny free electrons - Embedded Linux, kernel, drivers - Development, consulting, training and support. http://free-electrons.com 1/1 Thomas Petazzoni I CTO and Embedded Linux engineer at Free Electrons I Embedded Linux specialists. I Development, consulting and training. I http://free-electrons.com I Contributions I Kernel support for the Marvell Armada ARM SoCs from Marvell I Major contributor to Buildroot, an open-source, simple and fast embedded Linux build system I Living in Toulouse, south west of France Drawing from Frank Tizzoni, at Kernel Recipes 2016 free electrons - Embedded Linux, kernel, drivers - Development, consulting, training and support. http://free-electrons.com 2/1 Disclaimer I I am not a toolchain developer. Not pretending to know everything about toolchains. I Experience gained from building simple toolchains in the context of Buildroot I Purpose of the talk is to give an introduction, not in-depth information. I Focused on simple gcc-based toolchains, and for a number of examples, on ARM specific details. I Will not cover advanced use cases, such as LTO, GRAPHITE optimizations, etc. I Will not cover LLVM free electrons - Embedded Linux, kernel, drivers - Development, consulting, training and support. http://free-electrons.com 3/1 What is a cross-compiling toolchain? I A set of tools that allows to build source code into binary code for
    [Show full text]
  • GCC Toolchain Eclipse Setup Guide
    !"#$ % '#((#()*!+,-.#)/$01234 GCC Toolchain Eclipse Setup Guide WP0001 Version 5 September 23, 2020 Copyright © 2017-2020 JBLopen Inc. All rights reserved. No part of this document and any associated software may be reproduced, distributed or transmitted in any form or by any means without the prior written consent of JBLopen Inc. Disclaimer While JBLopen Inc. has made every attempt to ensure the accuracy of the information contained in this publication, JBLopen Inc. cannot warrant the accuracy of completeness of such information. JBLopen Inc. may change, add or remove any content in this publication at any time without notice. All the information contained in this publication as well as any associated material, including software, scripts, and examples are provided “as is”. JBLopen Inc. makes no express or implied warranty of any kind, including warranty of merchantability, noninfringement of intellectual property, or fitness for a particular purpose. In no event shall JBLopen Inc. be held liable for any damage resulting from the use or inability to use the information contained therein or any other associated material. Trademark JBLopen, the JBLopen logo, TREEspanTM and BASEplatformTM are trademarks of JBLopen Inc. All other trademarks are trademarks or registered trademarks of their respective owners. Contents 1 Overview 1 1.1 About Eclipse ............................................. 1 2 Eclipse Setup Guide (Windows) 2 2.1 MSYS2 Installation .......................................... 2 2.2 Eclipse Installation .......................................... 11 2.3 Toolchain Installation ......................................... 16 2.4 Environment Variable Setup ..................................... 17 2.4.1 PATH Environnement Variable Setup ........................... 17 3 Eclipse Setup Guide (Linux) 22 3.1 Eclipse Installation .......................................... 22 3.2 Toolchain Installation ......................................... 27 3.3 GNU Make Installation .......................................
    [Show full text]
  • The GNU Toolchain for ARM Targets HOWTO Wookey Chris Rutter Jeff Sutherland Paul Webb
    This chapter contains information on building a GNU toolchain for ARM targets. The GNU Toolchain for ARM targets HOWTO Wookey Chris Rutter Jeff Sutherland Paul Webb This document contains information on setting up a GNU toolchain for ARM targets. It details both some pre-compiled toolchains which you can install, and how to compile your own toolchain, as either a native or a cross-compiler. 1. Credits This document is based on the work of Chris Rutter (now, sadly, deceased) who’s ’Building the GNU toolchain for ARM targets’ document was gospel for some time. It eventually became out of date so Wookey (<[email protected]>) updated it and gave it a substantion rewrite, adding the pre-built toolchain info at the same time. Paul Webb (<[email protected]>) did the initial conversion to DocBook, Phil 1 The GNU Toolchain for ARM targets HOWTO Blundell (<[email protected]>) provided info on the current state of the art and comments on the draft. Jeff Sutherland (<[email protected]>) then fixed the bits that were still wrong, and now maintains the doc, along with Wookey. Thanx to all. As well as being on-line as a stand-alone HOWTO, this document is also available as a chapter of the book: A ’Guide to ARMLinux for Developers’ (http://www.aleph1.co.uk/armlinux/thebook.html) 2 This chapter contains information on building a GNU toolchain for ARM targets. 1. Toolchain overview The toolchain actually consists of a number of components. The main one is the compiler itself gcc, which can be native to the host or a cross-compiler.
    [Show full text]
  • Exploring the Construction of a Domain-Aware Toolchain for High-Performance Computing
    Exploring the Construction of a Domain-Aware Toolchain for High-Performance Computing Patrick McCormick, Christine Sweeney, Nick Moss, Dean Prichard, Samuel K. Gutierrez, Kei Davis, Jamaludin Mohd-Yusof Los Alamos National Laboratory Los Alamos, NM, USA Abstract—The push towards exascale computing has sparked in such a way that we can maintain the benefits of a general- a new set of explorations for providing new productive pro- purpose toolchain but also maintain a domain awareness within gramming environments. While many efforts are focusing on the entire toolchain. Scout is a strict superset of the C and the design and development of domain-specific languages (DSLs), C++ languages and extends the general-purpose toolchain few have addressed the need for providing a fully domain-aware to maintain this domain context throughout the compilation toolchain. Without such domain awareness critical features for process. This step is critical to enable support for a produc- achieving acceptance and adoption, such as debugger support, pose a long-term risk to the overall success of the DSL approach. tive and complete, domain-aware environment for developing, In this paper we explore the use of language extensions to debugging, and profiling applications. design and implement the Scout DSL and a supporting toolchain infrastructure. We highlight how language features and the A. Domain-Specific Languages software design methodologies used within the toolchain play a significant role in providing a suitable environment for DSL Although domain-specific languages have only recently development. become popular in the high-performance computing (HPC) research community, they have been a common part of com- Keywords—Domain Specific Language, Compiler, Debugging, puting for decades [2].
    [Show full text]
  • Virtualviewer® HTML5 Vs PDF.Js
    THETHE DOCUMENTDOCUMENT VIEWERVIEWER MATCHUP:MATCHUP: vs VirtualViewer® HTML5 vs PDF.js If you are reading this, you most likely know what a universal document viewer 1 is—software that allows users to view many different document and image DOWN formats within one single interface, eliminating the need to individually open separate applications, such as Microsoft Word and Adobe Acrobat. But not all document viewers are created equally. Like so many pieces of software and technology, the available viewers on the market range from free, open source software to high-end, powerful document viewers that can be integrated into existing content management systems and any other type of application that requires image or document viewing. As the saying goes, you get what you pay for. And when it comes to the wide array of viewers on the market, it isn’t a surprise that free, default viewers that are included in browsers and other document management systems have limited amounts of feature functionality compared to more robust document viewers. For someone simply needing to view a PDF within their internet browser, a default viewer might get the job done if you’re content to simply view and deal with the occasional unreadable document. But what about the power users? The knowledge workers in document-heavy industries such as legal, insurance, health, shipping, and government who interact with hundreds of documents daily? For these users, documents aren’t just something that need to be viewed, they also need to be managed, manipulated, annotated, distributed, and stored—among many other things. Enter: Snowbound’s pure HTML5 and feature-rich, VirtualViewer® HTML5.
    [Show full text]
  • Migrating to Swift from Flash and Actionscript
    ©Radoslava Leseva Adams & Hristo Lesev Migrating to Swift from Flash and ActionScript Radoslava Leseva Adams Hristo Lesev ©Radoslava Leseva Adams & Hristo Lesev Contents at a Glance About the Authors ...................................................................................................xxi About the Technical Reviewer ..............................................................................xxiii Acknowledgments .................................................................................................xxv Preface ................................................................................................................xxvii ■ Part I: Tool Migration ..........................................................................1 ■ Chapter 1: Setting Up Your Environment ............................................................... 3 ■ Chapter 2: Hello, Xcode! ...................................................................................... 15 ■ Chapter 3: Introducing the Xcode Debugger ....................................................... 39 ■ Chapter 4: Additional Development Tools ............................................................51 ■ Part II: Workfl ow Migration .............................................................. 69 ■ Chapter 5: “Hello, Swift!”—A Tutorial for Building an iOS App ...........................71 ■ Chapter 6: Adding a More Complex UI ...............................................................105 ■ Chapter 7: Concurrency .....................................................................................171
    [Show full text]
  • Creating Trustworthy AI a Mozilla White Paper on Challenges and Opportunities in the AI Era
    Creating Trustworthy AI a Mozilla white paper on challenges and opportunities in the AI era December 2020 Draft v1.0 foundation.mozilla.org Established in 2003, guided by the Mozilla Manifesto, the Mozilla Foundation believes the internet is a global public resource that must remain open and accessible to all. The Mozilla Foundation is a not-for-profit organization that exists to support and collectively lead the open source Mozilla project. It views its work as part of a global movement for a digital environment that aims at putting people in charge of their own data and that makes the internet a more democratic place by mobilizing a critical mass of conscious internet users. Many staff, fellows, and allies of Mozilla generously contributed data and ideas alongside countless readers who participated. The report was written by Becca Ricks and Mark Surman. Contributing authors included: Abigail Cabunoc Mayes; Ashley Boyd; Brandi Geurkink; David Zeber; Frederike Kaltheuner; Ilana Segall; J.Bob Alotta; Jane Polak Scowcroft; Jess Stillerman; Jofish Kaye; Kevin Zawacki; Marshall Erwin; Martin Lopatka; Mathias Vermeulen; Muriel Rovira Esteva; Owen Bennett; Rebecca Weiss; Richard Whitt; Sarah Watson; and Solana Larsen. This work is licensed under the Creative Commons Attribution 4.0 (BY) license, which means that the text may be remixed, transformed and built upon, and be copied and redistributed in any medium or format even commercially, provided credit is given to the author. For details go to http://creativecommons.org/licenses/by/4.0/ Creative Commons license terms for re-use do not apply to any content (such as graphs, figures, photos, excerpts, etc.) not original to the Open Access publication and further permission may be required from the rights holder.
    [Show full text]