May 2016, “Community Choice” Project of the Month – Libjpeg-turbo

For our May “Community Choice” Project of the Month, the community elected Libjpeg-turbo, a SIMD-accelerated libjpeg-compatible JPEG codec library. D.R. Commander, the developer and maintainer of Libjpeg-turbo, shared some thoughts about the project’s history, purpose, and direction.

SourceForge (SF): Tell me about the Libjpeg-turbo project please.
D.R. Commander (DRC): Libjpeg-turbo is a high-speed JPEG compression/decompression library that implements the libjpeg API used by a wide variety of applications (both open source and proprietary.) libjpeg-turbo accelerates the most common compression and decompression paths for JPEG images by as much as 6x relative to libjpeg, through the use of SIMD instructions on x86, ARM, PowerPC, and MIPS CPUs. libjpeg-turbo is now included in most open source operating systems (soon including Android) and is used by popular web browsers (notably Firefox and Chrome), so most people reading this are probably using libjpeg-turbo on a daily basis, whether they realize it or not.

SF: What made you start this?
DRC: My other pet projects (VirtualGL and TurboVNC) are high-performance open source remote display tools for 3D applications, so they have always needed some sort of high-speed image codec in order to stream the output of 3D applications in real time over various types of networks. “Back in the day”, I was using vendor-specific high-speed JPEG codecs, such as the Intel Performance Primitives and Sun mediaLib, but these weren’t always open source. Miyasaka Masaru developed MMX and SSE2 extensions for libjpeg in 2006. The TigerVNC developers adopted his code and did some further work on it, then they hired me in early 2009 to add 64-bit SSE2 support and to add colorspace extensions for compressing from/decompressing to 32-bit buffers. Eventually this codec matured enough that I was able to “eat my own dog food” and adopt it in VirtualGL and TurboVNC. At some point, developers in the streaming video community caught wind of our work and encouraged me to spin off the “libjpeg/SIMD” codec into a standalone project, so that other applications could easily take advantage of it. Thus, in early 2010, libjpeg-turbo was born. Some of the earliest adopters of it, outside of the remote display community, were applications that monitor security cameras.

SF: Has the original vision been achieved?
DRC: I believe it has. In fact, in most cases libjpeg-turbo now out-performs those proprietary/vendor-specific JPEG libraries that I used to use “back in the day.” Furthermore, I believe that libjpeg-turbo has helped to further Tom Lane’s original vision for libjpeg. In the release notes for libjpeg v6b, the last version that he worked on, he mentions performance enhancements as being “of great interest” for future development. Tom’s vision was to encourage wide adoption of the JPEG standard by providing a ubiquitous and legally-unencumbered JPEG codec library. libjpeg-turbo further encourages wide adoption of the JPEG standard by making JPEG fast enough to use with real-time compression/decompression tasks, which previously weren’t possible with libjpeg. Because libjpeg-turbo implements the industry-standard libjpeg API, applications that were already written to use this API can, without modification, take advantage of the additional speed in libjpeg-turbo. New applications also have the option of using the TurboJPEG API, which allows them to more straightforwardly compress/decompress images without dealing with the complexities of the libjpeg API. The TurboJPEG API also exposes functionality that would be very difficult to achieve with the libjpeg API, such as compressing from/decompressing to YUV planar image formats and doing multiple lossless transforms on the same JPEG image. We are making JPEG a lot faster and easier to use, and this enables use cases that previously wouldn’t have been possible with open source tools.

SF: Who can benefit the most from your project?
DRC: Applications that need to compress/decompress JPEG images in real time (for instance, video applications or remote display applications) benefit the most from libjpeg-turbo. Those applications were previously forced to trade off better performance for better compression, but libjpeg-turbo allows them to have both.

SF: What core need does Libjpeg-turbo fulfill?
DRC: The need for an industry-standard, ubiquitous, easy-to-use, high-speed JPEG library. Both libjpeg-turbo and libjpeg v7 and later evolved from Tom Lane’s work (he was the sole developer of libjpeg v6b and prior); but whereas libjpeg in the post-Tom Lane era has moved in the direction of introducing clever but incompatible and non-standard extensions to the JPEG format, libjpeg-turbo has instead moved in the direction of greatly speeding up the functionality that was already there, and making it easier to use. Apparently a lot of people preferred our approach.

SF: What’s the best way to get the most out of using Libjpeg-turbo?
DRC: Applications that were written to use the libjpeg API should “just work” with libjpeg-turbo, but if they have to compress from/decompress to 32-bit buffers, then they can take advantage of the libjpeg-turbo colorspace extensions in order to increase performance even more. A lot of new applications are using the TurboJPEG API instead, because it’s so much easier to use (although it doesn’t support some of the more advanced features of the libjpeg API, such as buffered I/O.) It also goes without saying that libjpeg-turbo will be of the most benefit on CPUs whose SIMD instructions we support (x86, ARM, PowerPC, MIPS.) Also, it will be necessary to compress/decompress baseline JPEG images in order to achieve peak performance (SIMD acceleration for progressive JPEGs is still a work in progress.)

SF: What has your project team done to help build and nurture your community?
DRC: libjpeg-turbo is a one-person shop. Over the years, I have received some big code contributions, particularly for things like SIMD support on ARM and MIPS processors, but I’ve always been the sole maintainer and, with the exception of outside patch submissions, the sole developer. The libjpeg-turbo community initially formed on its own, because there was a pent-up demand for a library that furthered Tom Lane’s work without breaking backward compatibility with libjpeg v6b. Also, a lot of developers liked the fact that our project maintains a fully open code repository and issue trackers, things that have traditionally not existed with libjpeg. Since its early days, I have built the libjpeg-turbo community simply by being as responsive as I could to the needs of libjpeg-turbo users, and evolving the project in the direction that most of them seemed to want it to go.

SF: Have you all found that more frequent releases helps build up your community of users?
DRC: There’s always a balance to be struck between releasing too often and not releasing often enough. Our community of “users” largely consists of application developers, and they (as I) are more concerned with quality over quantity. Thus, libjpeg-turbo has traditionally fallen somewhere between ESR’s classic metaphors of the cathedral and the bazaar. Major releases are dictated by new features, and new features are dictated by community demand. I always strive to implement and release bug fixes as quickly as possible, but I take great care to ensure that all new features are fully vetted– that they truly solve a well-defined problem in as elegant a way as possible, without creating any backward incompatibilities or regressions. Above all, I want libjpeg-turbo (and all of my other projects) to have the maximum possible utility, stability, and performance. I treat performance as a measure of quality, so any drop in performance is considered to be a bug. Our releases are dictated by whether there are sufficient changes relative to the prior release to justify a new release, and I would much rather delay a release than put out something that is half-baked or irrelevant. I use a traditional release model, whereby I put out a beta release, a final release (usually 3 months following the beta), then usually one or two subsequent bug-fix releases (minor revisions) for each major revision. So to answer your question, it isn’t the frequency of releases that builds the community of users– it’s being responsive to what the users really want. They mostly want libjpeg-turbo to change only if the change is compelling, and they want assurance that these changes will be implemented elegantly, with an eye toward ease of readability and maintenance, and without compromising stability or performance.

SF: What was the first big thing that happened for your project?
DRC: Probably the inclusion of libjpeg-turbo in Fedora. I never set out to build an industry-standard JPEG library. Originally I just wanted to build a fast, open source JPEG library that I could use in my own remote display projects. Red Hat was the first one to include libjpeg-turbo in their O/S distribution, and it kind of snowballed from there.

SF: What helped make that happen?
DRC: In addition to its increased performance, many O/S distributors (including Red Hat) and application developers also gravitated toward libjpeg-turbo because it maintained backward ABI compatibility with libjpeg v6b. Thus, if an O/S was already using libjpeg v6b, they could switch all of their bundled applications to libjpeg-turbo without rebuilding them. libjpeg v7 and later broke backward ABI compatibility, and thus applications had to be recompiled if they wanted to switch from libjpeg v6b to one of the newer IJG releases. Backward ABI compatibility has always been a problem in libjpeg, because all of the structures in the API are exposed. However, libjpeg v6b was out there for such a long time before libjpeg v7 was released (more than 11 years) that the libjpeg v6b ABI became something of a de facto standard, and when libjpeg v7 broke backward ABI compatibility, that caused problems for a lot of developers and integrators. Many of them decided that the features introduced in libjpeg v7 and later weren’t compelling enough to justify breaking backward compatibility, so that drove them toward libjpeg-turbo, irrespective of the performance improvements.

SF: How has SourceForge and its tools helped your project reach that success?
DRC: I particularly like the file release system on SourceForge, because it helps me track the number of downloads for a particular release (which helps to gauge its rate of adoption.) Also, because SourceForge supports SSH, I can easily push new releases and pre-releases to SF as part of my automated build process. Back when the Allura transition took place, I suggested (and the SF developers implemented) several enhancements to the code viewer that helped me maintain my preferred code review workflow.

SF: What is the next big thing for Libjpeg-turbo?
DRC: I’m currently working on extending the library to support AVX2 instructions, which we’re hoping will increase performance by 20-30% on newer x86 platforms that support that instruction set. This feature is being enabled by code contributions and funding from Intel. Another project on the horizon is SIMD acceleration for progressive JPEG compression, which should speed up the compression of progressive JPEGs by about 2x.

SF: How long do you think that will take?
DRC: I expect that both features will land this Fall.

SF: Do you have the resources you need to make that happen?
DRC: The two aforementioned features are funded, but in general, I rely on donations and funded development opportunities to keep this project moving forward. I am an independent developer, so I don’t draw a salary for my work on open source projects. I do things that way because it allows me to keep these projects vendor-agnostic and free of any one organization’s agenda, but the downside is that I have to frequently ask for money in order to keep the lights on. Even if someone else develops a new feature and submits it as a patch, the best-written patches will still require many hours of work to clean up and integrate. It’s hard sometimes to make people understand that maintaining a high-quality open source project costs money, even though the software itself is free. In general, only about half of the work I do on libjpeg-turbo is paid for (either directly, through funded development and donations, or indirectly, through funding from my other open source projects that use libjpeg-turbo.) The other half is pro bono, and it’s a constant struggle to balance the need to move the project forward with the need to put food on the table.

SF: If you had to do it over again, what would you do differently for Libjpeg-turbo?
DRC: I would have probably chosen a different name. There has been a great deal of confusion over the fact that our project is called “libjpeg-turbo” but we provide an API called “TurboJPEG”. However, there’s too much traction at this point to consider a name change.

[ Download Libjpeg-turbo ]

Projects of the Week, May 2, 2016

Here are the featured projects for the week, which appear on the front page of SourceForge.net:

Octave-Forge

Octave-Forge is a central location for the collaborative development of packages for GNU Octave. The Octave-Forge packages expand Octave’s core functionality by providing field specific features via Octave’s package system. For example, image and signal processing, fuzzy logic, instrument control, and statistics packages are examples of individual Octave-Forge packages. GNU Octave is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems, and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. Octave is normally used through its interactive command line interface, but it can also be used to write non-interactive programs. The Octave language is quite similar to Matlab so that most programs are easily portable.
[ Download Octave-Forge ]


WinPython

WinPython is a free open-source portable distribution of the Python programming language for Windows XP/7/8, designed for scientists, supporting both 32bit and 64bit versions of Python 2 and Python 3. Since September 2014, Development has moved to https://winpython.github.io/
[ Download WinPython ]


gnuplot

A famous scientific plotting package, features include 2D and 3D plotting, a huge number of output formats, interactive input or script-driven options, and a large set of scripted examples.
[ Download gnuplot ]


iDempiere

iDempiere = OSGi + ADempiere iDempiere Business Suite ERP/CRM/SCM done the community way. Focus is on the Community that includes Subject Matter Specialists, Implementors and End-Users. iDempiere is based on original Compiere/Adempiere plus a new architecture to use state-of-the-art technologies like OSGi, Buckminster, zk.
[ Download iDempiere ]


GnuCash

GnuCash is a personal and small-business finance manager with a check-book like register GUI to enter and track bank accounts, stocks, income and expenses. GnuCash is designed to be simple and easy to use but still based on formal accounting principles.
[ Download GnuCash ]


rEFInd

rEFInd is a fork of the rEFIt boot manager. Like rEFIt, rEFInd can auto-detect your installed EFI boot loaders and it presents a pretty GUI menu of boot options. rEFInd goes beyond rEFIt in that rEFInd better handles systems with many boot loaders, gives better control over the boot loader search process, and provides the ability for users to define their own boot loader entries.
[ Download rEFInd ]


NAS4Free

The NAS4Free operating system can be installed on virtually any hardware platform to share computer data storage over a computer network. ‘NAS’ as in “Network-Attached Storage” and ‘4Free’ as in ‘Free and open source’, NAS4Free is the simplest and fastest way to create an centralized and easily-accessible server for all kinds of data! NAS4Free supports sharing across Windows, Apple, and UNIX-like systems. It includes ZFS, Software RAID (0,1,5), disk encryption, S.M.A.R.T / email reports etc. with following protocols/services: CIFS/SMB (samba), Samba AD, FTP, NFS v4, TFTP, AFP, RSYNC, Unison, iSCSI, UPnP, Bittorent, Syncthing, VirtualBox and noVNC, Bridge, CARP (Common Address Redundancy Protocol) and HAST (Highly Available Storage). This all can easy be managed by a configurale webinterface.
[ Download NAS4Free ]


GNS3

GNS3 is a graphical network simulator that allows you to design complex network topologies. You may run simulations or configure devices ranging from simple workstations to powerful Cisco routers. It is based on Dynamips, Pemu/Qemu and Dynagen.
[ Download GNS3 ]


GeoServer

GeoServer is an open source software server written in Java that allows users to share and edit geospatial data. Designed for interoperability, it publishes data from any major spatial data source using open standards: WMS, WFS, WCS, WPS and REST
[ Download GeoServer ]

The Responsibilities of an Open Source User

User.

There are a number of things that come to mind when we encounter this term. It could be a person who, quite simply, uses something. But it could also be a derogatory term, used to describe a person who has abused the use of something.

In the world of open source, the term “user” has been pulled toward both ends of this spectrum, between the former definition and the latter. In the end however, what it really is and what it needs to be is neither. In the world of open source, a user is more of a contributor with duties and responsibilities.

More than Just a User
Users are not mere recipients of open source software. By working with an open source project users automatically become part of that project’s development. Because open source projects don’t have the same areas of documentation, quality control and marketing that proprietary projects do, it needs added manpower for these areas. That’s where users come in.

The role of users is crucial to open source. It is one of the pillars that make open source what it is- a place where users are not simply users, but a community that’s building up and developing a project as it is being used.

What Users Ought to Do
This responsibility may seem intimidating at first . But if you’ve been in the open source space long enough, you’re probably already doing what is expected of any open source user, and that’s to contribute to the project. While this often means contributing code, this isn’t the only way one can contribute:

  • Testing the software and providing feedback on it is essential to refining the project’s quality, functionality and ability to meet users’ needs.
  • Reporting bugs is another significant way of improving the software without writing any code.
  • Creating documentation is another meaningful contribution. Even small ones like tutorials or articles posted on social media can be very helpful, and can also serve as marketing.
  • Speaking of marketing, this is another great contribution. If you’re fond of using the software and think it’s fantastic, let others know. Talk about it, write about it; you could even teach others about it through workshops and meetups.

There are plenty of ways that users can fulfill their role and be the responsible contributors that they ought to be in the area of open source. No matter how small, it is essential that users remember and act on their responsibilities as this is key to ensuring the continuation and effectiveness of the open source system.

SourceForge on User Contributions
Here at SourceForge, we highly encourage not just developers but also users to contribute to their favorite projects. Even the smallest contribution can be a big help in the long run. Still unsure of how you can begin giving back to open source? Stay tuned to SourceForge as we tackle this topic on our coming posts.

Projects of the Week, April 25, 2016

Here are the featured projects for the week, which appear on the front page of SourceForge.net:

AutoClicker

A full-fledged autoclicker with two modes of autoclicking, at your dynamic cursor location or at a prespecified location. The maximum amounts of clicked can also be set (or left as infinite). Hotkeys work in the background for convenience. If you want to automate group of mouse actions, Please try this https://sourceforge.net/projects/orphamielautoclicker/files/AutoClickers.exe/download Whats new in v1.0.0.2: 1. You can now change your hotkeys! 2. Changed the about page 3. Added a few minor options v1.0.0.1 : 1. Your settings are now saved from your last session so you only need to enter them once. (Includes last fixed location) 2. Added double clicking and triple clicking 3. Added Right clicking and middle clicking
[ Download AutoClicker ]


winPenPack: Portable Software Collection

winPenPack is a project that aims at collecting the most frequently used and most popular open source applications made portable, so that they can be executed without installation from any USB Flash Drive or Hard Disk. The winPenPack suites offer a wide range of portable applications like office tools, internet tools, multimedia tools, development tools, security applications and other frequently used utilities. Everything you need, completely free, open source and portable!
[ Download winPenPack: Portable Software Collection ]


Money Manager Ex

Money Manager Ex (mmex) is an easy to use, money management application. It is a personal finance manager. It can be used to track your net worth, income vs expenses etc. It runs on Windows, Linux and Mac OSX.
[ Download Money Manager Ex ]


GrandPerspective

GrandPerspective is a utility application for Mac OS X that graphically displays the disk usage of a file system.
[ Download GrandPerspective ]


digiCamControl

digiCamControl is a free and open source software. This allows you to save time by transferring images directly from your camera to your computer as you take each shot and allow to control camera shooting parameters.
[ Download digiCamControl ]


VeraCrypt

VeraCrypt is a free disk encryption software brought to you by IDRIX (https://www.idrix.fr) and based on TrueCrypt 7.1a. It adds enhanced security to the algorithms used for system and partitions encryption making it immune to new developments in brute-force attacks. It also solves many vulnerabilities and security issues found in TrueCrypt. This enhanced security adds some delay ONLY to the opening of encrypted partitions without any performance impact to the application use phase. This is acceptable to the legitimate owner but it makes it much harder for an attacker to gain access to the encrypted data. All released files are PGP signed with key ID=0x54DDD393, available on key servers and downloadable at https://www.idrix.fr/VeraCrypt/VeraCrypt_PGP_public_key.asc VeraCrypt can mount TrueCrypt volumes. It also can convert them to VeraCrypt format. Documentation: https://veracrypt.codeplex.com/documentation FAQ : https://veracrypt.codeplex.com/wikipage?title=FAQ
[ Download VeraCrypt ]


Arch Bang

ArchBang is a simple GNU/Linux distribution which provides you with a lightweight Arch Linux system combined with the OpenBox window manager. Suitable for both desktop and portable systems – It is fast, stable, and always up to date.
[ Download Arch Bang ]


Tibia Auto

Tibia Auto is the best BOT software for the popular game Tibia. It has all the features a bot should have including: cavebot, runemaker, creature info, spell casting, auto healing and much much more.
[ Download Tibia Auto ]


DxWnd

Windows hooker – intercepts system calls to make fullscreen programs running in a window, to support a better compatibility, to enhance video modes and to stretch timing. It is typically very useful to run old windows games.
[ Download DxWnd ]

“Community Choice” Project of the Month Vote – June 2016

The vote for June 2016 Community Choice SourceForge Project of the Month is now available, and will run until May 15, 2016 12:00 UTC.


winPenPack: Portable Software Collection

winPenPack is a project that aims at collecting the most frequently used and most popular open source applications made portable, so that they can be executed without installation from any USB Flash Drive or Hard Disk. The winPenPack suites offer a wide range of portable applications like office tools, internet tools, multimedia tools, development tools, security applications and other frequently used utilities. Everything you need, completely free, open source and portable!
[ Download winPenPack: Portable Software Collection ]


MediaPortal

MediaPortal turns your PC into a very advanced MediaCenter / HTPC. It allows you to listen to your favorite music & radio, watch and store your videos and DVDs, view, schedule and record live TV as a digital video recorder and much much more
[ Download MediaPortal ]


SQuirreL SQL Client

SQuirreL SQL Client is a graphical SQL client written in Java that will allow you to view the structure of a JDBC compliant database, browse the data in tables, issue SQL commands etc.
[ Download SQuirreL SQL Client ]


movistartv

Kodi Movistar+ TV es un ADDON para XBMC/ Kodi que permite disponer de un decodificador virtual de Movistar+ TV para distintos sistemas operativos. Las principales funcionalidades son: – Actualización automática de canales. – Guía de programación (EPG). – Grabaciones en la Nube y en local. – Visualización de grabaciones en la nube. – Sincronización de grabaciones a local para evitar su caducidad. – Gestión avanzada de series. – Timeshift. – Distribución de la señal por DLNA. – Últimos 7 días Sistemas operativos soportados: – Windows. – Mac OSX. – Android. – Linux 64 y 32 bits. – Raspberrys (B, B+ y 2), Bannana PI …
[ Download movistartv ]


Bodhi Linux

Bodhi is a minimalistic, enlightened, Linux desktop.
[ Download Bodhi Linux ]


AutoClicker

A full-fledged autoclicker with two modes of autoclicking, at your dynamic cursor location or at a prespecified location. The maximum amounts of clicked can also be set (or left as infinite). Hotkeys work in the background for convenience. If you want to automate group of mouse actions, Please try this https://sourceforge.net/projects/orphamielautoclicker/files/AutoClickers.exe/download Whats new in v1.0.0.2: 1. You can now change your hotkeys! 2. Changed the about page 3. Added a few minor options v1.0.0.1 : 1. Your settings are now saved from your last session so you only need to enter them once. (Includes last fixed location) 2. Added double clicking and triple clicking 3. Added Right clicking and middle clicking
[ Download AutoClicker ]


The OpenGL Extension Wrangler Library

The OpenGL Extension Wrangler Library is a simple tool that helps C/C++ developers initialize extensions and write portable applications. GLEW currently supports a variety of operating systems, including Windows, Linux, Darwin, Irix, and Solaris.
[ Download The OpenGL Extension Wrangler Library ]


NamelessROM

NamelessRom is opportunity; an opportunity to have a voice to the development team of the after-market firmware that you run on your device. The main goal of NamelessRom is to provide quality development for android devices, phones, and tablets alike. NamelessRom developers are available nearly 24/7 and respond to bug reports and feature requests almost instantly. This availability will allow you, the end-user, to have direct input into exactly what features and functions are included on the firmware that YOU run. NamelessRom == endless possibilities. Unless you have an iPhone, then you’re out of luck. Get more information and find support on our forums at https://nameless-rom.org
[ Download NamelessROM ]


Hydrogen

Hydrogen is an advanced drum machine for GNU/Linux, Windows and Mac OS X. It’s main goal is to bring professional yet simple and intuitive pattern-based drum programming.
[ Download Hydrogen ]