Index: head/en_US.ISO8859-1/htdocs/news/status/report-2016-01-2016-03.xml
===================================================================
--- head/en_US.ISO8859-1/htdocs/news/status/report-2016-01-2016-03.xml (revision 48614)
+++ head/en_US.ISO8859-1/htdocs/news/status/report-2016-01-2016-03.xml (revision 48615)
@@ -1,2263 +1,2263 @@
This is a draft of the January–March 2016
status report. Please check back after it is finalized, and
an announcement email is sent to the &os;-Announce mailing
list.
The first quarter of 2016 was another productive quarter for the &os; project and community. [...]
Thanks to all the reporters for the excellent work!
The deadline for submissions covering the period from April to June 2016 is July 7, 2016.
?>In February, Program Verification Systems used their PVS-Studio tool to run a static analysis of the &os; kernel. A Phabricator review was created to allow developers to share comments on the results. A number of bugs ranging from trivial typos to redundant code to important logic errors were found and fixed. Some results were false positives. Several of these were addressed by changing code that misled the static analyzer and could also mislead a human reader.
The cooperation that Program Verification Systems offers to open-source projects like &os; benefits everyone. We thank them for sharing this analysis and their insights with us.
Federico Caminiti created an entirely new Spanish translation of the 31,000-word FAQ with editorial help from Carlos J Puga Medina.
This landmark accomplishment marks the first use of the new PO translation system to translate an entire book!
Ruey-Cherng Yu has begun an ambitious Chinese translation (zh_TW) of the 64,000-word Porter's Handbook. About half of the strings in the book have been translated so far.
Help add and improve translations of &os; documents into Spanish: start of freebsd-translators thread.
Help add and improve translations of &os; documents into Chinese or other languages.
A new -manage-gids option was added to the nfsuserd daemon. This option tells the NFS server to use the list of groups for a uid on the server and not the list of groups in the NFS RPC request. Use of this option avoids the 16 group limit for NFS RPCs using AUTH_SYS (the default).
Work is ongoing with respect to development of pNFS support for the NFS server using GlusterFS as a back end. This will be a long term project with the eventual goal of allowing the NFS server to scale beyond a single server system. Hopefully it will be available for testing in late Spring 2016. pNFS allows a NFSv4.1 client to do reads/writes directly to a data server and not the NFS server.
Development of the pNFS server will be in need of testing or it will never progress to a near production status. I hope to have code available in FreeBSD's subversion projects branch for testing in late spring 2016.
The purpose of this is to enable use of the Signal Processing Engine found in the NXP/Freescale e500v2 SoC. The SPE uses opcodes overlapping with Altivec, so is mutually exclusive. Additionally, the e500v2 does not have a traditional FPU, and instead uses the SPE for all floating point operations (or emulation as is currently done). Combined with the fact that the SPE ABI is incompatible with traditional ABI, a new MACHINE_ARCH is created to address this.
A project branch has been created with the work. A powerpcspe kernel boots on the RouterBoard RB800, and base utilities run properly.
Potentially optimizing setjmp/longjmp to not use SPE unless it has already been enabled. This would save the kernel switch for processes that do not otherwise use the SPE. This is a low priority task which may not be completed.
The major news for this quarter is the update of the i915 driver in the kernel! The driver now matches Linux 3.8.13, so it includes initial Haswell support. Linux 3.8 is already three years old, but work continues to upgrade DRM further. In particular, the move to linuxkpi was started.
In the Ports tree, Mesa was updated to 11.1.2. The next minor release, 11.2.0, is ready for testing in our development tree. We also updated libclc to 0.2.0.20151006, a library used by Mesa to provide OpenCL support. Upstream patches were added to beignet so all these ports now use the same LLVM version.
We attended FOSDEM 2016 in Brussels. Jean-Sébastien Pédron gave a talk to explain the work of the graphics team and show how people can contribute. It was well received and the presentation was followed by interesting discussions. FOSDEM was also a nice occasion to meet and talk again to the nice "upstream" developers of the graphics stack.
For the first year, we added two ideas for GSoC 2016: one for a kernel task, one to redesign libdevq. Six students submitted a proposal for those two ideas, that was unexpected! We now need to decide which one we want to mentor and the choice is difficult.
The blog is still down. We started to work on a replacement. We will probably go with a static generated website hosted on GitHub pages.
See the "Graphics" wiki page for up-to-date information.
Allwinner SoC are used in multiple hobbyist devboards and single board computers. Recently, support for these SoC have received a lot of updates
Task done during first quarter :
Ongoing task :
SPI driver
LCD Support
Any unsupported hardware device that might be of interest.
FreeBSD Mastery: Specialty Filesystems is now available everywhere, in print and ebook.
Lucas and Allan Jude have also finished writing "FreeBSD Mastery: Advanced ZFS." It is in copyedit now, and should be available before May 2016. Check zfsbook.com for details.
Lucas' next book, "PAM Mastery," has a whole bunch of FreeBSD content in it.
Make grammar corrections to Advanced ZFS, get it in print.
Since the last report &os; support for ThunderX has been significantly improved and stabilized. Semihalf contributions include the following items:
The driver supports all available Ethernet connections (1, 10, 30 Gbps) and system can saturate 10 Gbps link (on Tx) using 4 CPU cores.
This work is integrated to the FreeBSD HEAD on an on-going basis.
Support for multi Queue Set operation in VNIC
The new thread target that directly uses ptrace(2) was committed upstream and included in GDB 7.11. The port was also updated to GDB 7.11.
Figure out why the powerpc kgdb targets are not able to unwind the stack past the initial frame.
Add support for more platforms (arm, mips, aarch64) to upstream gdb for both userland and kgdb.
Add support for debugging powerpc vector registers.
Add support for catching system calls.
Add support for $_siginfo.
Add support for ELF auxv data via info auxv.
Implement info os commands.
Implement gdbserver for FreeBSD.
A new implementation for support of native PCI-express hotplug is present at the URL above. Much of the new code lives in the PCI-PCI bridge driver to handle hotplug events and manage the PCI-express slot registers. Additional changes in the branch include adding new rescan and delete commands to devctl(8) as well as support for rescanning PCI busses.
The current implementation has been tested on systems with ExpressCard but could use additional testing, especially on systems with other PCI-express HotPlug features such as mechanical latches, attention buttons, indicators, and so on.
Split branch into separate logical changes as commit candidates.
Additional testing.
The KDE on FreeBSD team focuses on packaging and making sure that the experience of KDE and Qt on FreeBSD is as good as possible.
While the list of updates is shorter than that for the previous quarter, the team remained busy and work on KDE Frameworks 5 and Plasma 5 continues.
Tobias Berner, who has been driving our KDE Frameworks 5 and Plasma 5 efforts from the beginning, received a KDE commit bit, and has been putting it to good use by upstreaming FreeBSD across several KDE repositories. Another team highlight in the beginning of this year is the (re)addition of another committer to our experimental repository: Adriaan de Groot, a longtime KDE contributor who also used to work on KDE and FreeBSD almost a decade ago when our team was first formed. Welcome back, Ade!
The following big updates were landed in the ports tree this quarter. In many cases, we have also contributed patches to the upstream projects.
Work on Qt 5.6.0 is under way in our experimental repositories. At the time of writing, it also contains KDE Frameworks 5.20.0, Plasma 5.6.1, and KDE Applications 16.03.80.
Users interested in testing those ports are encouraged to follow the instructions in our website and report their results to our mailing list. Qt5 5.6.0 is in our qt-5.6 branch, and Plasma 5 and the rest is in the plasma5 branch.
Land the KDE Frameworks 5 and Plasma 5 ports to the tree.
Commit the DigiKam 4.14.0 update currently being worked on in our experimental repository.
POSIX specifies several kinds of pthread locks, for this report the private and process-shared variants are considered. Private locks can be used only by the threads of the same process, which share the address space. Process-shared locks can be used by threads from any process, assuming the process can map the lock memory into its address space.
Our libthr, the library implementing the POSIX threads and locking operations, uses a pointer as the internal representation behind a lock. The pointer contains the address of the actual structure carrying the lock. This has unfortunate consequences for implementing the PTHREAD_PROCESS_SHARED attribute for locks, since really only the pointer is shared when the lock is mapped into distinct address spaces.
A common opinion was that we have no choice but to break the libthr Application Binary Interface (ABI) by changing the lock types to be the actual lock structures (and padding for future ABI extension). This is very painful for users, as our previous experience with non-versioned libc and libc_r shown.
Instead, I proposed and implemented a scheme where process-shared locks can be implemented without breaking the ABI. The lock memory is used as a key into the system-global hash of the shared memory objects (off-pages), which carry the real lock structures.
New umtx operations to create or look up the shared object, by the memory key, were added. Libthr is modified to lookup the object and use it for shared locks, instead of using malloc() as for private locks.
The pointer value in the user-visible lock type contains a canary for shared locks. Libthr detects the canary and switches into the shared-lock mode.
The proposal of inlining the lock structures, besides the drawbacks of breaking ABI, has its merits. Most important, the inlining avoids the need of indirection. Another important advantage over the off-page page approach is that no off-page object needs to be maintained, and the lifecycle of the shared lock naturally finishes with the destruction of the shared memory, without explicit cleanup. Right now, off-pages hook into vm object termination to avoid leakage, but long liviness of the vnode vm object prolonges the off-page existence for shared locks backed by files, however unlikely they may be.
Libthr with inlined locks become informally known as libthr2 project, since the library name better be changed instead of only bumping the library version. The rtld should ensure that libthr and libthr2 do not become simultaneously loaded into a single address space.
Implement robust mutexes.
Evaluate and implement libthr2.
Ruby on Rails is the base for most of the rubygems in the portstree. Currently version 3.2 and 4.2 coexists, but since Rails 3.2 runs out of support, the time has come to switch.
There is an ongoing progress to remove Rails 3.2 from the ports tree. While many gems already work with the new version, there are some exceptions. For example www/redmine needs a big update (which is currently tested) because it depends on gems which therefore depends on Rails 3.2.
If you want to help porting or testing, feel free to contact me or the mailinglist ruby@FreeBSD.org.
After nearly a year of work on this project, GitLab 8.5.5 was committed into the ports tree. A big thanks to the enormous number of people involved! Since GitLab is a fast moving project, there is also ongoing work to stay in sync with upstream. Have fun!
Build improvements for buildworld on head continue. Some highlights include:
Opportunistically skipping the bootstrap compiler phase of buildworld.
Skipping the make obj tree walk.
Enabling WITH_META_MODE in buildworld to provide a reliable incremental build using filemon(4) and bmake's .MAKE.MODE=meta. This should not be confused with WITH_DIRDEPS_BUILD which previously was named WITH_META_MODE and is a drastically different build system presented at BSDCan 2014 by Simon Gerraty.
Filemon is a kernel module for tracing which files a command creates, reads, writes, or executes. It allows tracking build dependencies in combination with bmake's meta mode. bmake stores filemon's output in a .meta file along with the build command and later uses this to trigger a rebuild of the target if any of the files referenced are missing or modified or if the build command changes. It provides the same functionality as compiler -MF flags but for everything. It will be critical for buildworld's WITH_META_MODE (which is the normal buildworld but just using filemon) to provide a reliable incremental build without even the need of .depend files or compiler -MF flags. This allows -DNO_CLEAN to work all of the time.
Filemon on -HEAD was improved for stability and performance over this quarter. It no longer causes every syscall it hooks into to loop on processes looking for a matching filemon struct. It now just attaches directly to the struct proc with its own pointer. This improves performance by reducing lock contention during a build. Much other work went into improving error handling and other stability issues in the module as well.
All of this work was done by Bryan Drewery, sponsored by EMC, but much help and identification of bugs was provided by Mateusz Guzik.
Improving credential handling
Improving EVENTHANDLER performance
Possibly providing a framework for syscallenter/syscallret hooking to avoid the need to hook syscalls as Filemon does.
A continuation of the Book-E QorIQ support enhancements by Semihalf dating back to 2012.
The AmigaOne X5000 series of AmigaOS compatible systems uses the Freescale QorIQ series of SoCs for a desktop-class form factor. The work here entails adding support for the e5500 core itself, in addition to support for the SoC peripherals.
Currently most code is checked in to enable basic support: dTSEC (ethernet), core support (e500mc, e5500). As part of this, rman, the kernel resource manager, was enhanced to use uintmax_t for resources. This allows devices to be physically above the 4GB boundary on 32-bit systems. With a statically compiled device tree, it boots to multiuser mode with nfsroot, and can be used as normal (serial and SSH logins once configured).
eSDHC driver: Work has been started on this, hijacking the imx_sdhc.c from Ian Lepore, but there are still bugs: missing DMA from the iMX driver, and odd timeouts after the system starts up.
SATA support: There is a WIP driver for the SATA controller, but it is currently very slow, about 11MB/s on a SATA 2 link. It currently relies on a 10ms delay on every SATA transaction for it to be even somewhat stable. Without this delay, the disk scan never works and I have not yet figured out why.
Local console (VGA) support: It currently boots with a serial console. vgapci0 is seen if there is a PCIe graphics card, but vt(4) does not attach to it yet.
64-bit support: The CPU on the board is a P5020, a 64-bit e5500 dual-core SoC. Currently, booke support in FreeBSD is 32-bit only.
SMP: SMP support on Book-E hardware is currently broken.
U-boot support: Currently this uses a compiled-in device tree, but it would be preferable to use the device tree provided by u-boot, or at least the Linux-compatible device tree.
More work is needed on the DPAA front (Datapath Acceleration Architecture) to improve the Ethernet driver and utilize the SEC engine for crypto, random(4), and IPSec.
The FreeBSD German Documentation Project translates FreeBSD's documentation (handbook, articles, website, etc.) into the German language.
Due to the tireless effort of Björn Heidotting, we made huge improvements in catching up with the translation of the German handbook. Benedict helped with reviewing the changes using FreeBSD's review system Phabricator, which helped a lot. We now have the following handbook chapters in sync with the latest version in the English tree:
We try to keep up the good work, while also looking at new ways to translate like the PO/gettext-based system. We are always looking for volunteers who are interested in translating small sections or even entire documents. The process is relatively easy and contributors do not have to know much to get started. The members of the FreeBSD German Documentation Team are also willing to mentor people who are interested in helping out.
Translate more documents.
The ELF Tool Chain project provides BSD-licensed implementations of compilation tools and libraries for building and analyzing ELF objects. The project began as part of &os; but later became an independent project to encourage wider participation from others in the open-source developer community.
The ELF Tool Chain project released version 0.7.1 in February. We have been tracking snapshots of the upstream repository in &os; and are not blocked waiting for releases to update. Having an official release brings the benefit of broader testing and visibility within other open source projects.
In the first quarter of 2016 The ELF Tool Chain tools were updated to a snapshot of upstream SVN revision 3400, which is close to the 0.7.1 release. Additional bug fixes were committed to FreeBSD and subsequently merged into the upstream repository.
ELF Tool Chain's elfcopy(1) is now installed as objcopy(1) by default as it is a viable replacement for the base system and ports tree.
Significant improvements were made to the elfcopy(1), readelf(1), and elfdump(1) tools, including better MIPS, RISC-V, and AArch64 support.
Fix issues found by fuzzing inputs to the tools.
Add automatic support for separate debug files.
Investigate replacement objdump, ld and as implementations.
Mellanox is working on a big infiniband update towards Mellanox OFED v3.2 of the infiniband stack in &os;. The updates include both userland and kernel. Infiniband patches for &os; are available in the link above which can be downloaded and applied to a recent &os;-head checkout.
When &os; virtual machines (VMs) run on Hyper-V, using Hyper-V synthetic devices is recommended to get the best network and storage performance and make full use of all the benefits that Hyper-V provides. The collection of drivers that are required to use Hyper-V synthetic devices in FreeBSD are known as FreeBSD Integration Services (BIS). Some of the BIS drivers (like network and storage drivers) have existed in FreeBSD 9.x and 10.x for years, but there are still some performance and stability issues and bugs. Compared with Windows and Linux VMs, the current BIS lacks some useful features, e.g., live virtual machine backup, TRIM/Unmap, the support for UEFI VM (boot from UEFI), etc.
During the past quarter, we made a great progress on the performance tuning for Hyper-V network driver. We also refactored and cleaned up the VMBus driver, and fixed some important bugs. All the work makes FreeBSD VMs run even better on Hyper-V and the Hyper-V based cloud platform Azure!
Our work during 2016Q1 is documented below:
Optimizing the performance of Hyper-V network driver
Refactoring and Cleaning up the VMBus driver code
Bug Fixing
Found a workaround for PR 20824 ([Hyper-V] VM network may not work over virtual switch based on wireless NIC): add "net.link.ether.inet.max_age=60" in /etc/sysctl.conf.
We plan to add support for live virtual machine backup, TRIM/Unmap, and UEFI VMs (Hyper-V Generation-2 VMs).
We published errata (FreeBSD-EN-16:04.hyperv, FreeBSD-EN-16:05.hv_netvsc) with the Release Engineering team, so 10.1 and 10.2 users can easily get the fixes of KVP and TCP checksum by upgrading the system.
We published BIS test cases for Hyper-V on github: https://github.com/FreeBSDonHyper-V/Test-BIS and we are going to publish the test cases for Azure soon.
As of the end of Q1, the ports tree holds a bit more than 25,000 ports, and the PR count is below 1,900. The activity on the ports tree remains steady, with almost 7,000 commits performed by around 120 active committers.
On the problem reports front, the encouraging trend observed during the previous quarter is confirmed, with again a significant increase in the number of PRs fixed during Q1. Indeed, almost 2,400 reports were fixed, which allows us to go below the threshold value of 2,000 open PRs.
In Q1, three commit bits were taken in for safekeeping, following an inactivity period of more than 18 months (milki, brian), or on committer's request (mmoll). We had one returning committer (fluffy) who had his commit bit reinstated. Two new developers were granted a ports commit bit (Olivier Cochard-Labbe and Christoph Moench-Tegeder).
On the management side, we had the pleasure to welcome miwi back to the portmgr team.
On the QA side, 39 exp-runs were performed to validate sensitive updates or cleanups. The most noticeable change might be the removal of the now unneeded ${PORTSDIR} when specifying dependencies in Makefiles (see the /usr/ports/CHANGES entry dated 20160402). Amongst other noticeable changes are the update to ruby 2.3, ruby-gems to 2.5.1, CMake to 3.5.0, clang to 3.8.0-r258968, Qt5 to 5.5.1, Gnome to 3.18, boost to 1.60.0, the update of libc++ in base to 3.8.0 release, and the enabling of LLVM libunwind by default on x86. The CentOS ports were also updated. Some infrastructure changes included the switch from bsd.gnome.mk and bsd.mate.mk to the simpler Uses/gnome.mk and Uses/mate.mk. Some work was also done to improve poudriere builds by reducing dependency calculation and general overheads.
We would like to remind everyone that the ports tree is built and run by volunteers, and any help is greatly appreciated. A great amount of effort was spent on the ports front in Q1, which allowed us to decrease the number of pending problem reports significantly, as well as on the ports infrastructure. Many thanks to all who contributed!
I wrote a small and straightforward yet feature-packed patch to implement ASLR for &os; available for broader testing.
With this change, randomization is applied to all non-fixed mappings. By randomization I mean the base address for the mapping is selected with a guaranteed amount of entropy (bits). If the mapping was requested to be superpage aligned, the randomization honours the superpage attributes.
The randomization is done on a best-effort basis - that is, the allocator falls back to a first fit strategy if fragmentation prevents entropy injection. It is trivial to implement a strong mode where failure to guarantee the requested amount of entropy results in mapping request failure, but I do not consider that to be usable.
I have not fine-tuned the amount of entropy injected right now. It is only a quantitive change that will not change the implementation. The current amount is controlled by aslr_pages_rnd.
To not spoil coalescing optimizations, to reduce the page table fragmentation inherent to ASLR, and to keep the transient superpage promotion for the malloced memory, the locality is implemented for anonymous private mappings, which are automatically grouped until fragmentation kicks in. The initial location for the anon group range is, of course, randomized. After some additional tuning, the measures appeared to be quite effective. In particular, very address-space hungry build of PyPy 5.0 on i386 successfully finished with the most aggressive functionality of the patch activated.
The default mode keeps the sbrk area unpopulated by other mappings, but this can be turned off, which gives much more breathing bits on the small AS architectures (funny that 32bits is considered small). This is tied with the question of following an application's hint about the mmap(2) base address. Testing shows that ignoring the hint does not affect the function of common applications, but I would expect more demanding code could break. By default sbrk is preserved and mmap hints are satisfied, which can be changed by using the kern.elf{32,64}.aslr_care_sbrk sysctl (currently enabled by default for wider testing).
Stack gap, W^X, shared page randomization, KASLR and other techniques are explicitly out of scope of this work.
The paxtest results for the run with the previous version 5 of the patch applied and aggresively tuned can be seen at the https://www.kib.kiev.ua/kib/aslr/paxtest.log . For comparison, the run on Fedora 23 on the same machine is at https://www.kib.kiev.ua/kib/aslr/fedora.log .
ASLR is enabled on per-ABI basis, and currently it is only enabled on native i386 and amd64 (including compat 32bit) and ARMv6 ABIs. I expect to test and enable ASLR for arm64 as well, later.
The procctl(2) control for ASLR is implemented, but I have not provided a userspace wrapper around the syscall. In fact, the most reasonable control needed is per-image and not per-process, but we have no tradition to put the kernel-read attributes into the extattrs of binary, so I am still pondering that part and this also explains the non-written tool.
Thanks to Oliver Pinter and Shawn Webb of the HardenedBSD project for pursuing ASLR for &os;. Although this work is not based on theirs, it was inspired by their efforts.
Thanks to Ed Maste, Robert Watson, John Baldwin, and Alan Cox for some discussions about the patch, and for The FreeBSD Foundation for directing me.
Bartek Rutkowski tested PyPy builds on i386, and David Naylor helped with the port which was at point of turbulence and upgrade during the work.
An important missing piece of the RCTL resource limits framework was the ability to limit file system throughput. This project aims to fill that hole by making it possible to add RCTL rules for read bytes per second (BPS), write BPS, read I/O operations per second (IOPS), and write IOPS, and adding a new throttling mechanism, to slow down offending processes when a limit gets hit.
The code has been committed and will ship with &os; 11.0-RELEASE.
Additional testing
Simplify locking, getting rid of rctl_lock altogether
Improve statistics gathering by make it possible for rctl -u to retrieve usage counters at a fixed point of time
Use the new throttling mechanism for %CPU limits
Qt 5.6 is a great framework to build embedded GUI applications, so when Qt 5.6 was released it was natural to bring it up on Raspberry Pi. Current Qt support in ports is very Xorg-centric so as a proof of concept I created an experimental qt56-base and qt56-multimedia.
qt56-base can be configured for a generic ARM device with the scfb video driver and specifically for Raspberry Pi in which case it supports eglfs mode with hardware OpenGL acceleration.
Check how embedded use cases can be fit into current bsd.qt.mk or whether a new port should be introduced.
A flattened device tree is a way to keep the hardware description separated from code. During the boot process, the loader passes a pointer to the device-tree blob to the kernel and the kernel instantiates and attaches drivers according to the information in the blob.
This approach does not work when hardware is expandable. For example, the Raspberry Pi and Beaglebone Black have the concept of capes or shields: snap-on PCBs that are connected to IO headers on the main board and provide additional functionality like an LCD screen or GPS receiver. These shields can be described by their own device trees and these trees can be overlaid on the base tree by the boot loader, thus providing an accurate description to the kernel.
The proposed patch add this functionality to ubldr. The user can specify a comma-separated list of overlays as U-Boot or the loader fdt_overlays variable and ubldr will load them from the /boot/dtb/ directory and do the overlaying.
The goal of this project is to reimplement the existing MMC/SD stack using the CAM framework. This will permit utilizing the well-tested CAM locking model and debug features. It will also be possible to process interrupts generated by the inserted card, which is a prerequisite for implementing the SDIO interface. SDIO support is necessary for communicating with WiFi/BT modules found on many development boards, like Wan Raspberry Pi 3.
Another feature that the new stack will have is support for sending SD commands from the userland applications using cam(3). This will allow building device drivers in userland and make debugging much easier.
The first version of the code was uploaded to Phabricator for review. The new stack is able to attach to the SD card and bring it to an operational state so it is possible to read and write to the card.
Support for the imx_sdhci SD Host Controller (used on iMX-based boards, for example Wandboard) was added in 2016Q1, along with ti_sdhci, which is used on the BeagleBone Black. Modifying other SDHCI-compliant drivers should not be difficult.
Modify the SDHCI driver on at least one x86 platform. This will make development and collaboration easier.
Begin implementing SDIO-specific bits.
During the first quarter of 2016, the most important business of the &os; Core Team has been to respond to the harassment incident last year. Core's actions were to assemble a timeline of the events and in the light of that to review Core's actions at the time; and to make recommendations about how better to handle such cases in future. During this process, draft reports were reviewed by people concerned in the case and in addition a number of interested members of the &os; community. Core would like to thank everyone involved for their contributions.
The report was published to the &os; developer community in mid-February, and contained six recommendations for the community to consider.
Core is also coordinating with the committee headed by Anne Dickison who are reviewing the Code of Conduct. A corpus of case studies is being assembled, which will be re-examined to see what impact changes to the Code of Conduct would have had.
Core, together with John Baldwin, are working on a plan to create a separate repository containing GPLv3 toolchain components. This will allow modernization of code within base beyond what the existing GPLv2 toolchain can handle, and permit support of certain new architectures where a copyfree licensed alternative (i.e., LLVM) is not yet available. A position paper will soon be circulated to developers for comment.
During this quarter three new commit bits were issued, and one was returned for safekeeping. Please welcome Wojciech Macek, Jared McNeil and Stanislav Galabov, and bid farewell to Davide Italiano, who although too busy to work on FreeBSD directly, will still be contributing through his work upstream on lld and other parts of the toolchain.
lld is the linker in the LLVM family of projects. It is intended to be a high-performance linker and supports the ELF, COFF and Mach-O object formats. Where possible, lld maintains command-line and functional compatibility with existing linkers (GNU BFD ld and gold), but lld's authors are not constrained by strict compatability where it would hamper performance or desired functionality.
The upstream lld project made significant progress in adding new functionality to lld's ELF support over the first quarter of 2016. The lld ELF linker is capable of self-hosting on FreeBSD/amd64 and is capable of linking many test applications.
lld currently lacks comprehensive linker script expression evaluation support, and therefore cannot yet be used to link the FreeBSD kernel. It also lacks versioned symbol support, and does not implement some options used in the FreeBSD boot loader components.
I've been running experimental world builds of FreeBSD/amd64 with lld installed in place of ld.bfd as the linker. With workarounds for the current gaps in functionality (using the WITHOUT_SYMVER option to disable symbol versioning use, and linking the loader components with GNU ld), lld is now able to link a working FreeBSD system.
-Enable the lld option by default in the llvm-devel (and later llvm) ports for testing.
Develop symbol version support and linker script expression improvements in the upstream lld project.
Import a newer lld snapshot into the vendor area, add build infrastructure and connect it to the world build, installed as ld.lld.
Request a ports exp-run with /usr/bin/ld a symlink to ld.lld.
Extensive testing.
Ceph is a distributed object store and file system designed to provide excellent performance, reliability and scalability.
Object Storage
Ceph provides seamless access to objects using native language bindings or radosgw, a REST interface that is compatible with applications written for S3 and Swift.
Block Storage
Ceph's RADOS Block Device (RBD) provides access to block device images that are striped and replicated across the entire storage cluster.
File System
Ceph provides a POSIX-compliant network file system that aims for high performance, large data storage, and maximum compatibility with legacy applications.
I started looking into Ceph, because the HAST solution with CARP and ggate did not really do what I wanted. But I am aiming for running a Ceph storage cluster of storage nodes that are running ZFS. The end station would be running bhyve on RBD disk that are stored in Ceph.
The FreeBSD build will build most of the tools in Ceph. Note that the RBD-dependent items will not work since FreeBSD does not have RBD yet.
Build Prerequisites
Compiling and building Ceph is tested on 11-CURRENT. It uses the CLANG toolset taht is available, which needs to be at least 3.7. Clang 3.4 (on 10.2-STABLE) does not have all the required capabilites to compile everything.
This setup will get things running for FreeBSD:
Install bash and link it in /bin (requires root privileges):
sudo pkg install bash
sudo ln -s /usr/local/bin/bash /bin/bash
Building Ceph
./do_freebsd.sh
Parts Not Yet Included
RBD
Rados Block Devices is implemented in the Linux kernel. It seems that there used to be a userspace implementation first. And perhaps ggated could be used as a template since it does some of the same functions, other than just between two disks. And it has a userspace counterpart.
BlueStore
FreeBSD and Linux have a different AIO API, and that needs to be made compatible. Next to that is the discussion in FreeBSD about aio_cancel not working for all device types.
CephFS
Cython tries to access an internal field in dirent which does not compile.
Tests that verify the correct working of the above are also excluded from the test set.
Tests Not Yet Included
ceph-detect-init/run-tox.sh
Because the current implementation does not know anything about FreeBSD rc-init.
Tests that make use of nosestests
Calling these does not really work since nosetests is not in /usr/bin, and calling through /usr/bin/env/nosetests does not work on FreeBSD.
test/pybind/test_ceph_argparse.py
test/pybind/test_ceph_daemon.py
Things To Investigate
ceph-{osd,mon} need two signals before they actually terminate.
ceph_erasure_code --debug-osd 20 --plugin_exists jerasure crashes due to SIGSEGV. This is a pointer reference that gets modified outside the regular programflow. Probably due to a programming error but perhaps wrong mixing and matching of many libraries.
Current and foremost task is to get the test set to complete without errors. This includes fixing several coredumps.
Run integration tests to see if the FreeBSD daemons will work with a Linux Ceph platform.
Get the Python tests that are currently excluded to work, and test OKE.
Compile and test the user space RBD (Rados Block Device).
Investigate and see if an in-kernel RBD device could be developed a la ggate.
Integrate the FreeBSD /etc/rc.d init scripts in the Ceph stack for testing and running Ceph on production machines.
The FreeBSD GNOME Team maintains the GNOME, MATE, and CINNAMON desktop environments and graphical user interfaces for FreeBSD. GNOME 3 is part of the GNU Project. MATE is a fork of the GNOME 2 desktop. CINNAMON is a desktop environment using GNOME 3 technologies but with a GNOME 2 look and feel.
This quarter, GNOME 3.18 and MATE 1.12 was committed to the ports tree.
GNOME 3.18 was imported into ports.
Tracking MATE 1.13, the development version that will become MATE 1.14.
Work started on porting GNOME 3.20.
We have Cinnamon 2.8 in our development tree, but we do not have the time to properly test and fix the issues before this Cinnamon can be committed to ports. Interested in helping with Cinnamon? Please let us know.