Deveopment of a Frame Buffer Driver for Embedded Linux Graphic System

Total Page:16

File Type:pdf, Size:1020Kb

Deveopment of a Frame Buffer Driver for Embedded Linux Graphic System ICCAS2003 October 22-25, Gyeongju TEMF Hotel, Gyeongju, Korea Development of a Frame Buffer Driver for Embedded Linux Graphic System Ga-Gue Kim, Woo-Chul Kang, Young-Jun Jung, and Hyung-Seok Lee Embedded S/W Technology Center, ETRI, Daejeon, Korea (Tel : +82-42-860-1123; E-mail: {ggkim, wchkang, jjing, [email protected]) Abstract : A frame buffer device is an abstraction for the graphic hardware. It allows application software to access the graphic hardware through a well-defined interface, so that the software doesn’t need to know anything about the low-level inter face stuff. We develop a frame buffer driver for VIA’s CLE266 graphic system based on ‘Qplus’, an embedded linux operating system developed by ETRI. Then, it will be seen that our frame buffer system is applied to embedded solutions such as movie player an d X server successfully. Keywords: frame buffer, embedded linux, Qplus, abstract console 1. INTRODUCTION framebuffer devices abstract them. Also, we will see that fbdev actually handles most of the mode setting issues for you Many machines (M68K, SPARC, PowerMac) use graphical to make life much easier. In the older API, the console code console because either the hardware does not support (VGA) was heavily linked to the framebuffer devices. The newer API text mode, or because the firmware programs the hardware has now moved nearly all console handling code into fbcon into a graphical mode. Thus the linux kernel needs to be aware itself. Now, fbcon is a true wrapper around the video card’s of this and support graphical consoles on these architechtures. abilities. This allows for massive code reduction and easier Graphical consoles will also gain more importance on the driver development. A good example of a framebuffer driver Intel platform, as VGA compatibility will be phased out by is the virtual framebuffer (vfb). The vfb driver is not a true many graphics chipset manufacturers in the near future. An framebuffer driver. All it does is map a chunk of memory to early example of this the Cyrix MediaGX], which provides userspace. It's used for demonstration purposes and testing. VGA compatibility through its BIOS only. 2.1 Data Structures The frame buffer device provides an abstraction for the graphics hardware. It represents the frame buffer of some The framebuffer drivers depend heavily on four data video hardware and allows application software to access the structures. These structures are declared in fb.h. They are graphics hardware through a well-defined interface, so the fb_var_screeninfo , fb_fix_screeninfo , fb_monospecs , and software does not need to know about the low level (hardware fb_info . The first three can be made available to and from register) stuff (except for hardware acceleration)[1]. userland. First let me describe what each means and how they Since years there has been minor support for graphical are used. consoles in the linux kernel, but it differed a lot among the fb_var_screeninfo is used to describe the features of a video different platforms. Starting with kernel 2.1.107, the frame card you normally can set. With fb_var_screeninfo , you can buffer device abstraction become completely integrated in the define such things as depth and the resolution you want. standard kernel sources and will become the standard way to The next structure is fb_fix_screeninfo . This defines the access graphics hardware. But it is definitely not new: it properties of a card that are created when you set a mode and originated from linux/M68K at the end of 1994 and has can't be changed otherwise. A good example is the start of the proven to fulfill its task during the previous years. framebuffer memory. This can depend on what mode is set. The frame buffer device abstraction has the following Now while using that mode, you don't want to have the advantages: memory position change on you. In this case, the video hardware tells you the memory location and you have no say (1) It provides a unified method to access graphics about it. hardware across different platforms. The third structure is fb_monospecs . In the old API, the (2) Drivers can be shared among different architectures, importance of fb_monospecs was very little. This allowed for which reduces code duplication. There were already three forbidden things such as setting a mode of 800x600 on a fix different drivers for the ATI Mach64 before. In the ideal case, frequency monitor. With the new API, fb_monospecs prevents a frame buffer device driver contains a chipset driver core, such things, and if used correctly, can prevent a monitor from with machine and bus dependent probe being cooked. code(Zorro/PCI/ISA/Open Firmware/…). The final data structure is fb_info . This defines the current (3) It provides simple multi-head: currently up to 8 frame state of the video card. fb_info is only visible from the kernel. buffer devices (displays) are supported. Unfortunately the Inside of fb_info , there exist a fb_ops which is a collection of input part of the console subsystem is not ready for multi-head needed functions to make fbdev and fbcon work. yet. (4) On boot up, you get one or more penguin logos (with or 2.2 Driver Layout without beer) The more CPUs you have, the more penguins Here I describe a clean way to code your drivers. A good you will see. example of the basic layout is vfb.c. In the example driver, we first present our data structures in the beginning of the file. Note that there is no fb_monospecs since this is handled by 2. FRAME BUFFER INTERNAL API code in fbmon.c. This can be done since monitors are Now that we understand the basic ideas behind video card independent in behavior from video cards. First, we define our technology and mode setting, we can now look at how the three basic data structures. For all the data structures I defined them static and declare the default values. The reason I do this is because it's less memory intensive than to allocate a piece of #ifdef CONFIG_FB_YOUR_CARD memory and filling in the default values. Note that drivers that extern void xxxfb_of_init(struct device_node *dp); support multihead (multiple video cards) of the same card, #endif /* CONFIG_FB_YOUR_CARD */ then the fb_info should be dynamically allocated for each card Then in the function offb_init_driver, you add something present. For fb_var_screeninfo and fb_fix_screeninfo , they still similar to the following: are declared static since all the cards can be set to the same #ifdef CONFIG_FB_YOUR_CARD mode. if (!strncmp(dp->name,"Open Firmware number of your card ", size_of_name)) { xxxfb_of_init(dp); 2.3 Initialization and boot time parameter handling There are two functions that handle the video card at boot return 1; time: } #endif /* CONFIG_FB_YOUR_CARD */ int xxfb_init(void); int xxfb_setup(char*); If Open Firmware doesn't detect your card, Open Firmware sets up a generic video mode for you. Now in your driver you In the example driver as with most drivers, these functions really need two initialization functions. are placed at the end of the driver. Both are very card specific. The next major part of the driver is declaring the functions In order to link your driver directly into the kernel, both of of fb_ops that are declared in fb_info for the driver. these functions must add the above definition with extern in The first two functions, xxfb_open and xxfb_release , can be front to fbmem.c. Add these functions to the following in called from both fbcon and fbdev. In fact, that's the use of the fbmem.c: user flag. If user equals zero then fbcon wants to access this device, else it's an explicit open of the framebuffer device. static struct { This way, you can handle the framebuffer device for the const char *name; console in a special way for a particular video card. For most drivers, this function just does a MOD_INC_USE_COUNT or int (*init)(void); MOD_DEC_USE_COUNT . int (*setup)(char*); These are the functions that are at the heart of mode setting. } fb_drivers[] __initdata = { There do exist a few cards that don't support mode changing. #ifdef CONFIG_FB_YOURCARD For these we have this function return an -EINVAL to let the { "driver_name", xxxfb_init, xxxfb_setup }, user know he/she can't set the mode. Actually, set_var does #endif more than just set modes. It can check them as well. In fb_var_screeninfo , there exists a flag called activate. This flag Setup is used to pass card specific options from the boot can take on the following values: FB_ACTIVATE_NOW , prompt of your favorite boot loader. A good example is: FB_ACTIVATE_NXTOPEN , and FB_ACTIVATE_TEST . FB_ACTIVATE_TEST tells us if the hardware can handle boot: video=matrox: vesa: 443 what the user requested. FB_ACTIVATE_NXTOPEN sets the values wanted on the next explicit open of fbdev. The final The basic setup function is: one FB_ACTIVATE_NOW checks the mode to see if it can be done and then sets the mode. You MUST check the mode int __init xxxfb_setup(char *options) before all things. Note that this function is very card specific, { but I will attempt to give you the most general layout. The char *this_opt; basic layout then for xxxfb_set_var is: if (!options || !*options) static int vfb_set_var(struct fb_var_screeninfo *var, struct return 0; fb_info *info) for (this_opt = strtok(options, ","); this_opt; { this_opt = strtok(NULL, ",")) int line_length; if (!strcmp(this_opt, "my_option")) { /* Basic setup test. Here we look at what the user passed /* Do your stuff. Usually set some static flags that the in that he/she wants.For example to test the fb_var_screeninfo driver later uses */ field vmode like its done in vfb.c.Here we see if the user has } else if (!strncmp(this_opt, "Other_option:", 5)) FB_VMODE_YWARP.
Recommended publications
  • Release Notes for X11R6.8.2 the X.Orgfoundation the Xfree86 Project, Inc
    Release Notes for X11R6.8.2 The X.OrgFoundation The XFree86 Project, Inc. 9February 2005 Abstract These release notes contains information about features and their status in the X.Org Foundation X11R6.8.2 release. It is based on the XFree86 4.4RC2 RELNOTES docu- ment published by The XFree86™ Project, Inc. Thereare significant updates and dif- ferences in the X.Orgrelease as noted below. 1. Introduction to the X11R6.8.2 Release The release numbering is based on the original MIT X numbering system. X11refers to the ver- sion of the network protocol that the X Window system is based on: Version 11was first released in 1988 and has been stable for 15 years, with only upwardcompatible additions to the coreX protocol, a recordofstability envied in computing. Formal releases of X started with X version 9 from MIT;the first commercial X products werebased on X version 10. The MIT X Consortium and its successors, the X Consortium, the Open Group X Project Team, and the X.OrgGroup released versions X11R3 through X11R6.6, beforethe founding of the X.OrgFoundation. Therewill be futuremaintenance releases in the X11R6.8.x series. However,efforts arewell underway to split the X distribution into its modular components to allow for easier maintenance and independent updates. We expect a transitional period while both X11R6.8 releases arebeing fielded and the modular release completed and deployed while both will be available as different consumers of X technology have different constraints on deployment. Wehave not yet decided how the modular X releases will be numbered. We encourage you to submit bug fixes and enhancements to bugzilla.freedesktop.orgusing the xorgproduct, and discussions on this server take place on <[email protected]>.
    [Show full text]
  • Stephen Clarke-Willson
    Contact Stephen Clarke-Willson www.linkedin.com/in/drstephencw Programmer, Producer, Executive (LinkedIn) Sammamish www.arena.net (Company) www.above-the-garage.com (Personal) Summary above-the-garage.com/blog (Blog) Software technology development leadership and management. Top Skills Specialties: Technical / Product team building and management; Systems Programming System Architecture experience as first, second and third level manager in fast growing Game Development companies; systems programming, systems architecture, technology development. Publications Guild Wars Microservices and 24/7 Uptime Guild Wars 2 - Scaling from one to Experience millions Applying Game Design To Virtual NCSOFT Environments VP of Technology Nano-Plasm March 2019 - Present (1 year 7 months) Bellevue, WA ArenaNet LLC 13 years 6 months Programmer in the role of Studio Technical Director May 2013 - March 2019 (5 years 11 months) Bellevue, WA Lead engineering staff (about 100 members) for "gaming as a service" with continuous high volume content creation and delivery at MMO scale. Translate business objectives into innovative yet achievable technical challenges. Created technical unit with flat reporting structure and peer input reviews. Programmer in the roles of Server Programmer / Server Team Lead October 2005 - April 2013 (7 years 7 months) Developing multi-threaded, restartable, dynamically updatable, high performance, internet-resilient, bug free server code for the MMO Guild Wars (1 and 2). Above the Garage Productions Programmer / Owner Page 1 of 4 May 2004 - October 2005 (1 year 6 months) Game Technology Developer, Above the Garage Productions Developed downloadable music system "DirectSong.com" (from payment system [PayPal] to delivery system to embedded music player using Microsoft WMA technology).
    [Show full text]
  • Reviving the Development of Openchrome
    Reviving the Development of OpenChrome Kevin Brace OpenChrome Project Maintainer / Developer XDC2017 September 21st, 2017 Outline ● About Me ● My Personal Story Behind OpenChrome ● Background on VIA Chrome Hardware ● The History of OpenChrome Project ● Past Releases ● Observations about Standby Resume ● Developmental Philosophy ● Developmental Challenges ● Strategies for Further Development ● Future Plans 09/21/2017 XDC2017 2 About Me ● EE (Electrical Engineering) background (B.S.E.E.) who specialized in digital design / computer architecture in college (pretty much the only undergraduate student “still” doing this stuff where I attended college) ● Graduated recently ● First time conference presenter ● Very experienced with Xilinx FPGA (Spartan-II through 7 Series FPGA) ● Fluent in Verilog / VHDL design and verification ● Interest / design experience with external communication interfaces (PCI / PCIe) and external memory interfaces (SDRAM / DDR3 SDRAM) ● Developed a simple DMA engine for PCI I/F validation w/Windows WDM (Windows Driver Model) kernel device driver ● Almost all the knowledge I have is self taught (university engineering classes were not very useful) 09/21/2017 XDC2017 3 Motivations Behind My Work ● General difficulty in obtaining meaningful employment in the digital hardware design field (too many students in the field, difficulty obtaining internship, etc.) ● Collects and repairs abandoned computer hardware (It’s like rescuing puppies!) ● Owns 100+ desktop computers and 20+ laptop computers (mostly abandoned old stuff I
    [Show full text]
  • OM-Cube Project
    OM-Cube project V. Hiribarren, N. Marchand, N. Talfer [email protected] - [email protected] - [email protected] Abstract. The OM-Cube project is composed of several components like a minimal operating system, a multi- media player, a LCD display and an infra-red controller. They should be chosen to fit the hardware of an em- bedded system. Several other similar projects can provide information on the software that can be chosen. This paper aims to examine the different available tools to build the OM-Multimedia machine. The main purpose is to explore different ways to build an embedded system that fits the hardware and fulfills the project. 1 A Minimal Operating System The operating system is the core of the embedded system, and therefore should be chosen with care. Because of its popu- larity, a Linux based system seems the best choice, but other open systems exist and should be considered. After having elected a system, all unnecessary components may be removed to get a minimal operating system. 1.1 A Linux Operating System Using a Linux kernel has several advantages. As it’s a popular kernel, many drivers and documentation are available. Linux is an open source kernel; therefore it enables anyone to modify its sources and to recompile it. Using Linux in an embedded system requires adapting the kernel to the hardware and to the system needs. A simple method for building a Linux embed- ded system is to create a partition on a development host and to mount it on a temporary mount point. This partition is filled as one goes along and then, the final distribution is put on the target host [Fich02] [LFS].
    [Show full text]
  • 4010, 237 8514, 226 80486, 280 82786, 227, 280 a AA. See Anti-Aliasing (AA) Abacus, 16 Accelerated Graphics Port (AGP), 219 Acce
    Index 4010, 237 AIB. See Add-in board (AIB) 8514, 226 Air traffic control system, 303 80486, 280 Akeley, Kurt, 242 82786, 227, 280 Akkadian, 16 Algebra, 26 Alias Research, 169 Alienware, 186 A Alioscopy, 389 AA. See Anti-aliasing (AA) All-In-One computer, 352 Abacus, 16 All-points addressable (APA), 221 Accelerated Graphics Port (AGP), 219 Alpha channel, 328 AccelGraphics, 166, 273 Alpha Processor, 164 Accel-KKR, 170 ALT-256, 223 ACM. See Association for Computing Altair 680b, 181 Machinery (ACM) Alto, 158 Acorn, 156 AMD, 232, 257, 277, 410, 411 ACRTC. See Advanced CRT Controller AMD 2901 bit-slice, 318 (ACRTC) American national Standards Institute (ANSI), ACS, 158 239 Action Graphics, 164, 273 Anaglyph, 376 Acumos, 253 Anaglyph glasses, 385 A.D., 15 Analog computer, 140 Adage, 315 Anamorphic distortion, 377 Adage AGT-30, 317 Anatomic and Symbolic Mapper Engine Adams Associates, 102 (ASME), 110 Adams, Charles W., 81, 148 Anderson, Bob, 321 Add-in board (AIB), 217, 363 AN/FSQ-7, 302 Additive color, 328 Anisotropic filtering (AF), 65 Adobe, 280 ANSI. See American national Standards Adobe RGB, 328 Institute (ANSI) Advanced CRT Controller (ACRTC), 226 Anti-aliasing (AA), 63 Advanced Remote Display Station (ARDS), ANTIC graphics co-processor, 279 322 Antikythera device, 127 Advanced Visual Systems (AVS), 164 APA. See All-points addressable (APA) AED 512, 333 Apalatequi, 42 AF. See Anisotropic filtering (AF) Aperture grille, 326 AGP. See Accelerated Graphics Port (AGP) API. See Application program interface Ahiska, Yavuz, 260 standard (API) AI.
    [Show full text]
  • Display Programming Guide
    Serial text [Data] display Programming Guide [ Version 3.4 Firmware ] Issue 7 22 July 2014 This guide applies to the following models: BA488C - Panel mounted, Intrinsically Safe BA484D - Field mounted, Intrinsically Safe BA688C - Panel mounted, Safe Area BA684D - Field mounted, Safe Area Contents Introduction........................................................................................................................................................................1 What’s in this Programming Guide..............................................................................................................................1 What’s in the Instruction Manuals...............................................................................................................................1 What’s in the Modbus Interface Guide.........................................................................................................................1 Other sources of information........................................................................................................................................1 Enhanced Features........................................................................................................................................................2 Instrument Features...........................................................................................................................................................3 Display............................................................................................................................................................................3
    [Show full text]
  • Manycore GPU Architectures and Programming, Part 1
    Lecture 19: Manycore GPU Architectures and Programming, Part 1 Concurrent and Mul=core Programming CSE 436/536, [email protected] www.secs.oakland.edu/~yan 1 Topics (Part 2) • Parallel architectures and hardware – Parallel computer architectures – Memory hierarchy and cache coherency • Manycore GPU architectures and programming – GPUs architectures – CUDA programming – Introduc?on to offloading model in OpenMP and OpenACC • Programming on large scale systems (Chapter 6) – MPI (point to point and collec=ves) – Introduc?on to PGAS languages, UPC and Chapel • Parallel algorithms (Chapter 8,9 &10) – Dense matrix, and sorng 2 Manycore GPU Architectures and Programming: Outline • Introduc?on – GPU architectures, GPGPUs, and CUDA • GPU Execuon model • CUDA Programming model • Working with Memory in CUDA – Global memory, shared and constant memory • Streams and concurrency • CUDA instruc?on intrinsic and library • Performance, profiling, debugging, and error handling • Direc?ve-based high-level programming model – OpenACC and OpenMP 3 Computer Graphics GPU: Graphics Processing Unit 4 Graphics Processing Unit (GPU) Image: h[p://www.ntu.edu.sg/home/ehchua/programming/opengl/CG_BasicsTheory.html 5 Graphics Processing Unit (GPU) • Enriching user visual experience • Delivering energy-efficient compung • Unlocking poten?als of complex apps • Enabling Deeper scien?fic discovery 6 What is GPU Today? • It is a processor op?mized for 2D/3D graphics, video, visual compu?ng, and display. • It is highly parallel, highly multhreaded mulprocessor op?mized for visual
    [Show full text]
  • Operating System Components for an Embedded Linux System
    INSTITUTEFORREAL-TIMECOMPUTERSYSTEMS TECHNISCHEUNIVERSITATM¨ UNCHEN¨ PROFESSOR G. F ARBER¨ Operating System Components for an Embedded Linux System Martin Hintermann Studienarbeit ii Operating System Components for an Embedded Linux System Studienarbeit Executed at the Institute for Real-Time Computer Systems Technische Universitat¨ Munchen¨ Prof. Dr.-Ing. Georg Farber¨ Advisor: Prof.Dr.rer.nat.habil. Thomas Braunl¨ Author: Martin Hintermann Kirchberg 34 82069 Hohenschaftlarn¨ Submitted in February 2007 iii Acknowledgements At first, i would like to thank my supervisor Prof. Dr. Thomas Braunl¨ for giving me the opportunity to take part at a really interesting project. Many thanks to Thomas Sommer, my project partner, for his contribution to our good work. I also want to thank also Bernard Blackham for his assistance by email and phone at any time. In my opinion, it was a great cooperation of all persons taking part in this project. Abstract Embedded systems can be found in more and more devices. Linux as a free operating system is also becoming more and more important in embedded applications. Linux even replaces other operating systems in certain areas (e.g. mobile phones). This thesis deals with the employment of Linux in embedded systems. Various architectures of embedded systems are introduced and the characteristics of common operating systems for these devices are reviewed. The architecture of Linux is examined by looking at the particular components such as kernel, standard C libraries and POSIX tools for embedded systems. Furthermore, there is a survey of real-time extensions for the Linux kernel. The thesis also treats software development for embedded Linux ranging from the prerequi- sites for compiling software to the debugging of binaries.
    [Show full text]
  • ANSI® Programmer's Reference Manual Line Matrix Series Printers
    ANSI® Programmer’s Reference Manual Line Matrix Series Printers Printronix, LLC makes no representations or warranties of any kind regarding this material, including, but not limited to, implied warranties of merchantability and fitness for a particular purpose. Printronix, LLC shall not be held responsible for errors contained herein or any omissions from this material or for any damages, whether direct, indirect, incidental or consequential, in connection with the furnishing, distribution, performance or use of this material. The information in this manual is subject to change without notice. This document contains proprietary information protected by copyright. No part of this document may be reproduced, copied, translated or incorporated in any other material in any form or by any means, whether manual, graphic, electronic, mechanical or otherwise, without the prior written consent of Printronix, LLC Copyright © 1998, 2012 Printronix, LLC All rights reserved. Trademark Acknowledgements ANSI is a registered trademark of American National Standards Institute, Inc. Centronics is a registered trademark of Genicom Corporation. Dataproducts is a registered trademark of Dataproducts Corporation. Epson is a registered trademark of Seiko Epson Corporation. IBM and Proprinter are registered trademarks and PC-DOS is a trademark of International Business Machines Corporation. MS-DOS is a registered trademark of Microsoft Corporation. Printronix, IGP, PGL, LinePrinter Plus, and PSA are registered trademarks of Printronix, LLC. QMS is a registered
    [Show full text]
  • CP/M-80 Kaypro
    $3.00 June-July 1985 . No. 24 TABLE OF CONTENTS C'ing Into Turbo Pascal ....................................... 4 Soldering: The First Steps. .. 36 Eight Inch Drives On The Kaypro .............................. 38 Kaypro BIOS Patch. .. 40 Alternative Power Supply For The Kaypro . .. 42 48 Lines On A BBI ........ .. 44 Adding An 8" SSSD Drive To A Morrow MD-2 ................... 50 Review: The Ztime-I .......................................... 55 BDOS Vectors (Mucking Around Inside CP1M) ................. 62 The Pascal Runoff 77 Regular Features The S-100 Bus 9 Technical Tips ........... 70 In The Public Domain... .. 13 Culture Corner. .. 76 C'ing Clearly ............ 16 The Xerox 820 Column ... 19 The Slicer Column ........ 24 Future Tense The KayproColumn ..... 33 Tidbits. .. .. 79 Pascal Procedures ........ 57 68000 Vrs. 80X86 .. ... 83 FORTH words 61 MSX In The USA . .. 84 On Your Own ........... 68 The Last Page ............ 88 NEW LOWER PRICES! NOW IN "UNKIT"* FORM TOO! "BIG BOARD II" 4 MHz Z80·A SINGLE BOARD COMPUTER WITH "SASI" HARD·DISK INTERFACE $795 ASSEMBLED & TESTED $545 "UNKIT"* $245 PC BOARD WITH 16 PARTS Jim Ferguson, the designer of the "Big Board" distributed by Digital SIZE: 8.75" X 15.5" Research Computers, has produced a stunning new computer that POWER: +5V @ 3A, +-12V @ 0.1A Cal-Tex Computers has been shipping for a year. Called "Big Board II", it has the following features: • "SASI" Interface for Winchester Disks Our "Big Board II" implements the Host portion of the "Shugart Associates Systems • 4 MHz Z80-A CPU and Peripheral Chips Interface." Adding a Winchester disk drive is no harder than attaching a floppy-disk The new Ferguson computer runs at 4 MHz.
    [Show full text]
  • Linux Hardware Compatibility HOWTO
    Linux Hardware Compatibility HOWTO Steven Pritchard Southern Illinois Linux Users Group [email protected] 3.1.5 Copyright © 2001−2002 by Steven Pritchard Copyright © 1997−1999 by Patrick Reijnen 2002−03−28 This document attempts to list most of the hardware known to be either supported or unsupported under Linux. Linux Hardware Compatibility HOWTO Table of Contents 1. Introduction.....................................................................................................................................................1 1.1. Notes on binary−only drivers...........................................................................................................1 1.2. Notes on commercial drivers............................................................................................................1 1.3. System architectures.........................................................................................................................1 1.4. Related sources of information.........................................................................................................2 1.5. Known problems with this document...............................................................................................2 1.6. New versions of this document.........................................................................................................2 1.7. Feedback and corrections..................................................................................................................3 1.8. Acknowledgments.............................................................................................................................3
    [Show full text]
  • Op E N So U R C E Yea R B O O K 2 0
    OPEN SOURCE YEARBOOK 2016 ..... ........ .... ... .. .... .. .. ... .. OPENSOURCE.COM Opensource.com publishes stories about creating, adopting, and sharing open source solutions. Visit Opensource.com to learn more about how the open source way is improving technologies, education, business, government, health, law, entertainment, humanitarian efforts, and more. Submit a story idea: https://opensource.com/story Email us: [email protected] Chat with us in Freenode IRC: #opensource.com . OPEN SOURCE YEARBOOK 2016 . OPENSOURCE.COM 3 ...... ........ .. .. .. ... .... AUTOGRAPHS . ... .. .... .. .. ... .. ........ ...... ........ .. .. .. ... .... AUTOGRAPHS . ... .. .... .. .. ... .. ........ OPENSOURCE.COM...... ........ .. .. .. ... .... ........ WRITE FOR US ..... .. .. .. ... .... 7 big reasons to contribute to Opensource.com: Career benefits: “I probably would not have gotten my most recent job if it had not been for my articles on 1 Opensource.com.” Raise awareness: “The platform and publicity that is available through Opensource.com is extremely 2 valuable.” Grow your network: “I met a lot of interesting people after that, boosted my blog stats immediately, and 3 even got some business offers!” Contribute back to open source communities: “Writing for Opensource.com has allowed me to give 4 back to a community of users and developers from whom I have truly benefited for many years.” Receive free, professional editing services: “The team helps me, through feedback, on improving my 5 writing skills.” We’re loveable: “I love the Opensource.com team. I have known some of them for years and they are 6 good people.” 7 Writing for us is easy: “I couldn't have been more pleased with my writing experience.” Email us to learn more or to share your feedback about writing for us: https://opensource.com/story Visit our Participate page to more about joining in the Opensource.com community: https://opensource.com/participate Find our editorial team, moderators, authors, and readers on Freenode IRC at #opensource.com: https://opensource.com/irc .
    [Show full text]