8. How are Things for Developers

8.1. Java

8.1.1. Best of breed free software Java implementation

Fedora includes multiple best of breed free software Java(TM) implementations, obtained through active adoption of innovative technology integrations produced by Fedora and others within upstream projects. The implementations integrated into Fedora are based on OpenJDK (http://openjdk.java.net/) and the IcedTea GNU/Linux distribution integration project (http://icedtea.classpath.org/), or based on alternatives such as the GNU Compiler for Java (GCJ - http://gcc.gnu.org/java and the GNU Classpath core class libraries (http://www.gnu.org/software/classpath/). All Fedora innovations are pushed upstream to get the widest possible integration of the technologies in general Java implementations.

The implementation of OpenJDK 6 included in Fedora 10 uses the HotSpot virtual machine runtime compiler on x86, x86_64, and SPARC. On PowerPC (PPC) it uses the zero interpreter, which is slower. On all architectures an alternative implementation based on GCJ and GNU Classpath is included that includes an ahead-of-time compiler to produce native binaries.

Fedora binaries for selected architectures (currently only x86 and x86_64 based on OpenJDK) are tested against the Java Compatibility Kit (JCK) by Red Hat to guarantee 100% compatibility with the Java Specification (JDK 1.6 at this time).

8.1.2. Handling Java Applets and web start applications

In Fedora 10 gcjwebplugin has been replaced by IcedTeaPlugin that runs untrusted applets safely in a Web browser and works on any architecture. You can see which Applet Plugin is installed by typing about:plugins in Firefox. The new plugin adds support for the JavaScript bridge (LiveConnect) that was missing from earlier versions. For more details on "bytecode-to-JavaScript bridge (LiveConnect)", refer to the bug report:

https://bugzilla.redhat.com/show_bug.cgi?id=304021

Feedback on the security policy is very appreciated. If you suspect the security policy may be too restrictive to enable restricted applets, run the firefox -g command in a terminal window to see what is being restricted, then grant the restricted permission in the /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/security/java.policy file. If you then file a bug report, your exception could end up in the packaged security policy and you won't have to hack the policy file in the future.

Experimental Web Start (javaws) support via NetX has been added to the IcedTea repository. When a Java Network Launching Protocol (.jnlp) file is embedded on a web page you can open it with the IcedTea Web Start (/usr/bin/javaws).

http://jnlp.sourceforge.net/ -- NetX

8.1.3. New integration with other Fedora technologies

Through the IcedTea project, OpenJDK has been integrated with several new technologies that are also part of Fedora 10.

8.1.3.1. VisualVM integration through the NetBeans framework

VisualVM (

jvisualvm

) provides a graphical overview of any local or remotely running Java application, letting you monitor all running threads, classes, and objects allocated by the application by taking thread dumps, heap dumps, and other lightweight profiling tools.

8.1.3.2. PulseAudio integration for javax.sound

PulseAudio integrations provides all the benefits of PulseAudio to any java application using the javax.sound package.

8.1.3.3. Integration of Mozilla Rhino - JavaScript

Rhino is a pure-Java JavaScript implementation from Mozilla providing an easy mixing of Java and JavaScript for developers using the javax.script package.

8.1.3.4. Other improvements

Also in Fedora 10 Java cryptography (javax.crypto) is fully supported without any (regional) restrictions.

8.1.4. Fedora and JPackage

Fedora 10 includes many packages derived from the JPackage Project.

http://jpackage.org

Some of these packages are modified in Fedora to remove proprietary software dependencies, and to make use of GCJ's ahead-of-time compilation feature. Use the Fedora repositories to update these packages, or use the JPackage repository for packages not provided by Fedora. Refer to the JPackage website for more information about the project and the software it provides.

[Warning] Mixing Packages from Fedora and JPackage

Research package compatibility before you install software from both the Fedora and JPackage repositories on the same system. Incompatible packages may cause complex issues.

8.1.5. Note on upgrading from Fedora 8 - OpenJDK Replaces IcedTea

Since Fedora 9 the packages called java-1.7.0-icedtea* in Fedora 8 have been renamed to java-1.6.0-openjdk*. The Fedora 8 IcedTea packages tracked the unstable OpenJDK 7 branch, whereas the java-1.6.0-openjdk* packages track the stable OpenJDK 6 branch. All the upstream IcedTea sources are included in the java-1.6.0-openjdk SRPM.

If you are upgrading from a system based on Fedora 8 that still has IcedTea installed, the package changeover does not happen automatically. The packages related to IcedTea based on OpenJDK 7 must first be erased, then the new OpenJDK 6 packages installed.

      su -c 'yum erase java-1.7.0-icedtea{,-plugin}' su -c 'yum install java-1.6.0-openjdk{,-plugin}'
    

Upgrading from Fedora 9 does not require special action.

8.2. Development

This section covers various development tools and features.

8.2.1. Tools

8.2.1.1. Eclipse

This release of Fedora includes Fedora Eclipse, based on the Eclipse SDK version 3.4. The 3.4 series of releases has a "What's New in 3.4" page:

http://help.eclipse.org/stable/index.jsp?topic=/org.eclipse.platform.doc.user/whatsNew/platform_whatsnew.html

Release notes specific to 3.4 are also available.

http://www.eclipse.org/eclipse/development/readme_eclipse_3.4.html

Some of the notable features in 3.4 include a number of improvements in handling bookmarks, easier ways to find and install plug-ins, and additional help with refactoring.

8.2.1.1.1. Additional plugins

This release of Fedora includes plugins for C/C++ eclipse-cdt, RPM specfile editing eclipse-rpm-editor, PHP eclipse-phpeclipse, Subversion eclipse-subclipse, SELinux eclipse-slide and eclipse-setools, regular expression testing eclipse-quickrex, Fortran eclipse-photran, Bugzilla integration eclipse-mylyn, Git eclipse-egit, Perl eclipse-epic, Checkstyle eclipse-checkstyle, and Python eclipse-pydev.

8.2.1.1.1.1. Translations from the Babel project - eclipse-nls

This release also includes the Babel language packs, which provide translations for Eclipse and Eclipse plugins in a number of languages. Note that some of the languages have very low coverage: even if you have the translations installed, you will probably still see many strings in English. The Babel project accepts contributions if you would like to help their translation efforts.

http://www.eclipse.org/babel/

8.2.1.1.1.2. Upgrading from Fedora 9

Users upgrading from Eclipse 3.3 will need to migrate any plug-ins they have installed from sources other than RPMs. The simplest way to do this is to re-install. For plug-in developers migrating from 3.3, refer to the "Plug-in Migration Guide":

http://help.eclipse.org/ganymede/nav/2_3

8.2.1.1.2. GCC Compiler Collection

This release of Fedora has been built with GCC 4.3.2, which is included with the distribution.

For more information on GCC 4.3, refer to:

http://gcc.gnu.org/gcc-4.3/

8.2.1.1.2.1. Target-specific improvements
8.2.1.1.2.1.1. IA-32 x86-64

ABI changes

  • Starting with GCC 4.3.1, decimal floating point variables are aligned to their natural boundaries when they are passed on the stack for i386.

Command-line changes

  • Starting with GCC 4.3.1, the -mcld option has been added to automatically generate a cld instruction in the prologue of functions that use string instructions. This option is used for backward compatibility on some operating systems and can be enabled by default for 32-bit x86 targets by configuring GCC with the --enable-cld configure option.

8.2.1.1.3. Improved Haskell support

Fedora 10 introduces better support for Haskell. With a new set of packaging guidelines and tools, it is incredibly easy to support any Haskell program using the Glasgow Haskell Compiler. Package creation and deployment, leveraging Fedora's quality tools plus a few new friends has never been easier. As support for Haskell grows there will be continued development for Haskell as more libraries are introduced.

Package creation is quite simple. Haskell already provides the infrastructure for compiling and deploying packages consistently. Setting up a package for Fedora takes very little time, meaning code that works in Haskell works in Fedora too.

Fedora also provides tools for enterprise deployment of Fedora packages. With the inclusion of Haskell in Fedora, the developer is now free to write enterprise level applications in Haskell and feel secure knowing the code can be used in Fedora.

https://fedoraproject.org/wiki/Features/GoodHaskellSupport

8.2.1.1.4. Objective CAML OCaml coverage greatly extended

Fedora 10 contains the OCaml 3.10.2 advanced programming language and a very comprehensive list of packages:

http://cocan.org/getting_started_with_ocaml_on_red_hat_and_fedora#Package_status

OCaml was available as an update to Fedora 9 but not in the initial release.

8.2.1.1.5. NetBeans

This release of Fedora includes NetBeans IDE, version 6.1. NetBeans IDE is an Integrated Development Environment (IDE) for Java, C/C++, Ruby, PHP, etc. Default configuration of the NetBeans IDE (Java SE IDE configuration) supports development of programs for the Java platform, Standard Edition (Java SE), including development of the modules for the NetBeans Platform.

The NetBeans IDE is a modular system and includes facilities for updating and installing plugins. There is a wide spectrum of plugins for the NetBeans IDE that are provided by community members and third-party companies.

8.2.1.1.5.1. NetBean resources
8.2.1.1.6. AMQP Infrastructure

The AMQP Infrastructure package is a subset of the Red Hat Enterprise MRG. The package allows for development of scalable, interoperable, and high-performance enterprise applications.

More specifically it consists of the following.

  • AMQP (protocol version 0-10) messaging broker/server

  • Client bindings for C++, Python, and Java (using the JMS interface)

  • A set of command line interface configuration/management utilities

  • A high-performance asynchronous message store for durable messages and messaging configuration.

8.2.1.1.6.1. AMQP resources

For more information refer to the following resources.

8.2.1.1.7. Appliance building tools

Appliances are pre-installed and pre-configured system images. This package includes tools and meta-data that make it easier for ISVs, developers, OEMS, etc. to create and deploy virtual appliances. The two components of this feature are the ACT (Appliance Creation Tool) and the AOS (The Appliance Operating System). Install the appliance-tools package with Add/Remove Software or yum.

8.2.1.1.7.1. Appliance Creation Tool

The Appliance Creation Tool is a tool that creates Appliance Images from a kickstart file. This tool uses the live CD creator API as well as patches to the live CD API that allow for the creation of multi-partitioned disk images. These disk images can then be booted in a virtual container such as Xen, KVM, and VMware. This tool is included in the appliance-tools package. This package contains tools for building appliance images on Fedora based systems including derived distributions such as RHEL, CentOS, and others.

8.2.1.1.7.2. Appliance Operating System

The Appliance Operating System is a scaled down version of Fedora with a small footprint. It contains only the packages necessary to run an appliance. The hardware supported by this spin of Fedora would be limited, primarily focusing on virtual containers such as KVM and VMware. The goal is to create a base that developers can build their applications on top of, only pulling in packages that their software requires.

8.2.1.1.7.3. Appliance building tools resources

http://thincrust.net/ Appliance Tool Project Site

8.2.1.1.8. Python NSS bindings

Python bindings for NSS/NSPR allow Python programs to utilize the NSS cryptographic libraries for SSL/TLS and PKI certificate management. The python-nss package provides a Python binding to the NSS and NSPR support libraries.

Network Security Services (NSS) is a set of libraries supporting security-enabled client and server applications. Applications built with NSS can support SSL v2 and v3, TLS, PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X.509 v3 certificates and other security standards. NSS has received FIPS 140 validation from NIST.

8.2.1.1.8.1. Python NSS bindings resources

http://people.redhat.com/jdennis/python-nss/doc/api/html/index.html -- Library Documentation

8.3. Linux_kernel

[Tip] Deprecated or out of date content?

This content may be deprecated or out of date, it has not been updated since the Fedora 9 release notes.

This section covers changes and important information regarding the 2.6.27 based kernel in Fedora 10. The 2.6.27 kernel includes:

  • The Fedora kernel offers paravirt_ops support in domU, as part of the kernel team's efforts to reduce the work required to produce current Xen kernels.

  • Xen fully virtualized guests can directly boot a kernel and initrd image and pass kernel boot args. For more details refer to http://fedoraproject.org/wiki/Features/XenFullvirtKernelBoot

8.3.1. Version

Fedora may include additional patches to the kernel for improvements, bug fixes, or additional features. For this reason, the Fedora kernel may not be line-for-line equivalent to the so-called vanilla kernel from the kernel.org web site:

http://www.kernel.org/

To obtain a list of these patches, download the source RPM package and run the following command against it:

      rpm -qpl kernel-<version>.src.rpm
    

8.3.2. Changelog

To retrieve a log of changes to the package, run the following command:

      rpm -q --changelog kernel-<version>
    

If you need a user friendly version of the changelog, refer to http://wiki.kernelnewbies.org/LinuxChanges. A short and full diff of the kernel is available from http://kernel.org/git. The Fedora version kernel is based on the Linus tree.

Customizations made for the Fedora version are available from http://cvs.fedoraproject.org.

8.3.3. Kernel flavors

Fedora 10 includes the following kernel builds:

  • Native kernel, for use in most systems. Configured sources are available in the kernel-devel package.

  • The kernel-PAE, for use in 32-bit x86 systems with more than 4GB of RAM, or with CPUs that have a NX (No eXecute) feature. This kernel support both uniprocessor and multi-processor systems. Configured sources are available in the kernel-PAE-devel package.

  • Virtualization kernel for use with the Xen emulator package. Configured sources are available in the kernel-xen-devel package.

You may install kernel headers for all four kernel flavors at the same time. The files are installed in the /usr/src/kernels/<version>[-PAE|-xen|-kdump]-<arch>/ tree. Use the following command:

      su -c 'yum install kernel{,-PAE,-xen,-kdump}-devel'
    

Select one or more of these flavors, separated by commas and no spaces, as appropriate. Enter the root password when prompted.

[Note] x86 Kernel Includes Kdump

Both the x86_64 and the i686 kernels are relocatable, so they no longer require a separate kernel for kdump capability. PPC64 still requires a separate kdump kernel.

[Note] Default Kernel Provides SMP

There is no separate SMP kernel available for Fedora on i386, x86_64, and ppc64. Multiprocessor support is provided by the native kernel.

[Note] PowerPC Kernel Support

There is no support for Xen or kdump for the PowerPC architecture in Fedora. 32-bit PowerPC does still have a separate SMP kernel.

8.3.4. Preparing for kernel development

Fedora 10 does not include the kernel-source package provided by older versions since only the kernel-devel package is required now to build external modules. Configured sources are available, as described Section 8.3.3, “Kernel flavors”.

[Important] Custom Kernel Building

For information on kernel development and working with custom kernels, refer to http://fedoraproject.org/wiki/Building_a_custom_kernel

8.3.5. Reporting bugs

Refer to http://kernel.org/pub/linux/docs/lkml/reporting-bugs.html for information on reporting bugs in the Linux kernel. You may also use http://bugzilla.redhat.com for reporting bugs that are specific to Fedora.

8.4. Embedded

Fedora 10 includes a number of applications to support embedded development on a variety of targets. Included are assemblers, compilers, debuggers, programmers, IDEs and assorted utilities.

8.4.1. AVR

avrdudeSoftware for programming Atmel AVR microcontroller

AVRDUDE is a program for programming Atmel's AVR CPU's. It can program the Flash and EEPROM, and where supported by the serial programming protocol, it can program fuse and lock bits. AVRDUDE also supplies a direct instruction mode allowing one to issue any programming instruction to the AVR chip regardless of whether AVRDUDE implements that specific feature of a particular chip.

avr-gccCross Compiling GNU GCC targeted at avr

This is a Cross Compiling version of GNU GCC, which can be used to compile for the AVR platform, instead of for the native i386 platform.

avr-gcc-c++Cross Compiling GNU GCC targeted at avr

This package contains the Cross Compiling version of g++, which can be used to compile c++ code for the AVR platform, instead of for the native i386 platform.

avr-libcC library for use with GCC on Atmel AVR microcontrollers

AVR Libc is a free software project with the goal to provide a high quality C library for use with GCC on Atmel AVR microcontrollers.

AVR Libc is licensed under a single unified license. This so-called modified Berkeley license is intended to be compatible with most free software licenses such as the GPL, yet impose as little restrictions as possible for the use of the library in closed-source commercial applications.

avr-binutilsCross Compiling GNU binutils targeted at avr

This is a Cross Compiling version of GNU binutils, which can be used to assemble and link binaries for the AVR platform, instead of for the native i386 platform.

avr-gdbGDB for (remote) debugging avr binaries

This is a special version of GDB, the GNU Project debugger, for (remote) debugging AVR binaries. GDB allows you to see what is going on inside another program while it executes or what another program was doing at the moment it crashed.

avariceProgram for interfacing the Atmel JTAG ICE to GDB

Program for interfacing the Atmel JTAG ICE to GDB to allow users to debug their embedded AVR target

8.4.2. Microchip PIC

gputilsDevelopment utilities for Microchip (TM) PIC (TM) microcontrollers

This is a collection of development tools for Microchip (TM) PIC (TM) microcontrollers. This is ALPHA software: there may be serious bugs in it, and it's nowhere near complete. The gputils package currently only implements a subset of the features available with Microchip's tools. Refer to the documentation for an up-to-date list of what gputils can do.

gpsim A simulator for Microchip (TM) PIC (TM) microcontrollers

The gpsim software is a simulator for Microchip (TM) PIC (TM) microcontrollers. It supports most devices in Microchip's 12-bit, 14bit, and 16-bit core families. In addition, gpsim supports dynamically loadable modules such as LED's, LCD's, resistors, and so forth, to extend the simulation environment beyond the PIC.

ktechlab Development and simulation of microcontrollers and electronic circuits

KTechlab is a development and simulation environment for microcontrollers and electronic circuits, distributed under the GNU General Public License. KTechlab consists of several well-integrated components:

  • A circuit simulator, capable of simulating logic, linear devices and some nonlinear devices.

  • Integration with gpsim, allowing PICs to be simulated in circuit.

  • A schematic editor, which provides a rich real-time feedback of the simulation.

  • A flowchart editor, allowing PIC programs to be constructed visually.

  • MicroBASIC; a BASIC-like compiler for PICs, written as a companion program to KTechlab.

  • An embedded Kate part, which provides a powerful editor for PIC programs.

  • Integrated assembler and disassembler via gpasm and gpdasm.

pikdev IDE for development of PICmicro based application (under Linux/KDE)

PiKdev is a simple IDE dedicated to the development of PIC based applications under KDE. Features:

  • Integrated editor

  • Project management

  • Integrated programming engine for 12, 14 and 16 bits PIC (flash or EPROM technology)

  • Support for parallel and serial port programmers

  • KDE compliant look-and-feel

The system administrator must read README.Fedora file located in the /usr/share/doc/pikdev-0.9.2 directory to complete the full feature installation.

piklab Development environment for applications based on PIC & dsPIC

Piklab is a graphic development environment for PIC and dsPIC microcontrollers. It interfaces with various toochains for compiling and assembling and it supports several Microchip and direct programmers. The system administrator must refer to the README.Fedora file located in the /usr/share/doc/piklab-0.15.0 directory to complete full feature installation.

pikloops Code generator for PIC delays

PiKLoop generates code to create delays for Microchip PIC microcontrollers. It is a useful companion for Pikdev or Piklab IDE.

8.4.3. Others and processor agnostic

dfu-programmer A device firmware update based USB programmer for Atmel chips

A linux based command-line programmer for Atmel chips with a USB bootloader supporting ISP. This is a mostly Device Firmware Update (DFU) 1.0 compliant user-space application. Currently supported chips: 8051, AVR, at89c51snd1c, at90usb1287, at89c5130, at90usb1286, at89c5131, at90usb647, at89c5132, at90usb646, at90usb162, and at90usb82.

sdcc Small Device C Compiler

The sdcc-2.6.0-12 package for SDCC is a C compiler for 8051 class and similar microcontrollers. The package includes the compiler, assemblers and linkers, a device simulator, and a core library. The processors supported (to a varying degree) include the 8051, ds390, z80, hc08, and PIC.

uisp Universal In-System Programmer for Atmel AVR and 8051

The uisp utility is for downloading/uploading programs to AVR devices. It can also be used for some Atmel 8051 type devices. In addition, uisp can erase the device, write lock bits, verify and set the active segment. For use with the following hardware to program the devices: pavr, stk500, Atmel STK500, dapa, Direct AVR Parallel Access, stk200, Parallel Starter Kit, STK200, STK300, abb, Altera, ByteBlasterMV Parallel Port Download Cable, avrisp, Atmel AVR, bsd, fbprg (parallel), dt006 (parallel), dasa serial (RESET=RTS SCK=DTR MOSI=TXD MISO=CTS), dasa2 serial (RESET=!TXD SCK=RTS MOSI=DTR MISO=CTS)

simcoupe SAM Coupe emulator (spectrum compatible)

SimCoupe emulates an 8bit Z80 based home computer, released in 1989 by Miles Gordon Technology. The SAM Coupe was largely spectrum compatible, with much improved hardware

sjasm A z80 cross assembler

SjASM is a two pass macro Z80 cross assembler

z88dk A Z80 cross compiler

The z88dk program is a Z80 cross compiler capable of generating binary files for a variety of Z80 based machines (such as the ZX81, Spectrum, Jupiter Ace, and some TI calculators).

8.5. KDE 3 Development Platform and Libraries

Fedora now features KDE 4, and no longer offers KDE 3 as a full desktop environment. Fedora does provide the following KDE 3.5 library packages to run and build the many existing KDE 3 applications:

  • qt3, qt3-devel (and other qt3-* packages): Qt 3.3.8b

  • kdelibs3, kdelibs3-devel: KDE 3 libraries

  • kdebase3, kdebase3-pim-ioslaves, kdebase3-devel: KDE 3 core files required by some applications

Moreover, the KDE 4 kdebase-runtime package, which provides khelpcenter, also sets up khelpcenter as a service for KDE 3 applications, so help in KDE 3 applications works. The KDE 3 version of khelpcenter is no longer provided, and the KDE 4 version is used instead.

These packages are designed to:

  • comply with the Filesystem Hierarchy Standard (FHS), and

  • be completely safe to install in parallel with KDE 4, including the -devel packages.

In order to achieve this goal, Fedora KDE SIG members have made two changes to the KDE 4 kdelibs-devel packages:

  • The library symlinks are installed to /usr/lib/kde4/devel or /usr/lib64/kde4/devel depending on system architecture.

  • The kconfig_compiler and makekdewidgets tools have been renamed kconfig_compiler4 and makekdewidgets4, respectively.

These changes should be completely transparent to the vast majority of KDE 4 applications that use cmake to build, since FindKDE4Internal.cmake has been patched to match these changes. The KDE SIG made these changes to the KDE 4 kdelibs-devel rather than to kdelibs3-devel because KDE 4 stores these locations in a central place, whereas KDE 3 applications usually contain hardcoded copies of the library search paths and executable names.

Note that kdebase3 does not include the following:

  • A complete KDE 3 desktop (workspace) which could be used instead of KDE 4; in particular, KDE 3 versions of KWin, KDesktop, Kicker, KSplash and KControl are not included.

  • The KDE 3 versions of kdebase applications such as Konqueror and KWrite, which are redundant with the KDE 4 versions and would conflict with them.

  • The libkdecorations library required for KWin 3 window decorations, as those window decorations cannot be used in the KDE 4 version of KWin.

  • The libkickermain library required by some Kicker applets, as there is no Kicker in Fedora 10 and thus Kicker applets cannot be used.

[Note] Developing new software against the legacy API is discouraged.

As with any backwards-compatibility library, you would be developing against a deprecated interface.