CYGNAL:
Cygwin Native Application Library

Develop a Cygwin application.
Deploy the same executable as a Windows "native" application.

Summary

The situation: Cygwin provides an excellent, modern ISO C and POSIX library on Windows and a rich development environment. Now that Cygwin is under the GNU LGPL license, applications with various licenses, free as well as proprietary, can be shipped with the Cygwin run-time libraries without obtaining a commercial license from Red Hat Inc. Cygwin can be used for developing and deploying self-contained applications for Windows, since it's possible to ship a Cygwin executable by bundling it with the Cygwin library cygwin1.dll plus the GCC run-time library cyggcc_s-1.dll.

The problem: Unfortunately, some behaviors of the functions in Cygwin DLL depend on and are geared toward the POSIX-like environment which Cygwin provides. For instance, some aspects of the path handling will confuse Windows users. And some things don't work at all: the popen and system functions look for a system command interpreter whose path name is /bin/sh which takes a -c option.

The solution: The Cygnal project provides a patched cygwin1.dll object which changes some of the behaviors such that they make sense in the context of a Windows application. Cygwin executables do not have to be recompiled to use the Cygnal library. They just have to be bundled with it; it is a drop-in replacement. In other words: develop and test in the Cygwin environment, then test and deploy the same executable as a Windows application.

Frequently Asked Questions

If you have questions or concerns, please check The Cygnal FAQ.

Status

The following table is a summary of the fixed and open Cygnal issues, capturing the current level of completion and development scope. The entries in the ID column are navigable links to details:

The current stable release of Cygnal is 3.2.0. This version number indicatest that it is based on Cygwin 3.2.0.

ID Fixed? Summary Target
1 /bin/sh command interpreter required 2.5.1.98
2 Nuisance console window pops up when spawning process. 2.5.1.98
3 Spawned process window shows in background. 2.5.1.98
4 VT100 emulation incompatibility. 2.5.1.98
5 Cygnal programs need to know whether they are running on Cygnal or Cygwin 2.5.1.98
6 Eliminate fake / POSIX root and /cygdrive 2.5.1.98
7 Restore concept of per-volume current directory and "logged volume". 2.5.1.98
8 C stdio text streams are using Unix format. 2.5.1.99
9 Applications with hard-coded /bin/sh don't work. 2.5.1.99
10 Symbolic links use Cygwin-specific representation default 2.5.1.99
11 Cygnal should rename CYGWIN environment variable. 2.5.1.99
12 Remaining VT100 end-of-line cursor position problem. 2.5.2
13 Repeated clear screen causes cmd.exe strange behavior 2.5.2
14 The stdin, stdout and stderr streams are binary. 2.8.99.98
15 Cygwin rewrites some env vars like PATH. 2.8.99.98
16 Cygwin passes down HOME variable containing /home path. 2.8.99.98
17 Cygwin getpwent returns non-native paths in struct passwd 2.8.99.98
?? Contact the mailing list to add your issue.

Stable Release 3.2.0 Downloads

The Cygnal patches rebased over Cygwin 3.2.0 appear in the cygnal-3.1.98 branch which has reached a release.

Below are the binary downloads:

Arch Branch SHA256
i686 cygnal-3-1-98-branch 1f69d0b9b29599a0a97a416c8becf127e1c05aff1f55b02d487cab7d23324c96
x86-64 cygnal-3-1-98-branch 55da37e8f9c8d084245920c460a4267069e0201ac9465b86801e7a54b1e6edb5

Development Release 3.1.98 Downloads

The Cygnal patches rebased over Cygwin 3.2.0 appear in the cygnal-3.1.98 branch as a beta release.

Below are the binary downloads:

Arch Branch SHA256
i686 cygnal-3-1-98-branch 77c1e755ffe49e0d80836e2a82e375fd028f066755ef911a83ddcf4266b1761a
x86-64 cygnal-3-1-98-branch 6929bf6781c322597584dcb71fbe36f836017a4704bcaad2ca5959b4aa390d30

Development Release 3.6.1.98 Downloads

The Cygnal patches rebased over Cygwin 3.1.7 appear in the cygnal-3.1.6.98 branch as a beta release.

Below are the binary downloads:

Arch Branch SHA256
i686 cygnal-3-1-6-98-branch bb261dc2d3d89f9d95cd50cde067b95e352ef10a25d14795311c454f51e1e35d
x86-64 cygnal-3-1-6-98-branch 0977e9f377b50b2c7991d63b054762b2c54fec465f301c2781fcdb13c654dca6

Development Release 2.8.99.98 Downloads

The Cygnal patches had now been forward-ported over the Cygwin 2.9.0 baseline, appearing in the cygnal-2.9.0-branch.

These are the cygnal-2.8.99.98 tagged development snapshots, built from the cygnal-2.9.0 branch.

Arch Branch SHA256
i686 cygnal-2-9-0-branch 83cee606cdd12dea99cd296458dcef2c3d663e50dcbc96ca324f1b135ee7b748
x86-64 cygnal-2-9-0-branch 46f9037d65581b2eb82f084fc53b3b6f704ec65db4ecbe27491a8d17a8cfeb5e

Release 2.5.2 Downloads

Cygnal 2.5.2 materials (prior release):

Arch Branch SHA256
i686 cygnal-release-2.5.2 b6cdb6a376ac1835258858496f13d5758a08ce1e2ad9d341f41ddf6508286ec3
x86-64 cygnal-release-2.5.2 943233be5f47bd10daeaf499fd701d1e88d5f15680512a958f401014193b23b8

Git repository

The Cygnal git repository is hosted at https://www.kylheku.com/cgit/cygnal. This repository is a clone of the upstream Cygwin repository. The upstream development brach is called cygwin-master in the Cygnal repository. The current Cygnal development branch is called cygnal-2.5.2, indicating that it's an offshoot of the Cygwin 2.5.2 release. In the future, all of the patches on cygnal-2.5.2 will be migrated to a new cygnal-x.y.z branch based on a newer Cygwin release, and development will continue on that branch.

Mailing List

You can a subscribe here to the Cygnal mailing list to receive messages. To start a discussion, registration is not required. Simply send an e-mail to cygnal@kylheku.com. To view past discussions, visit the list archive.

Projects using Cygnal

Cygnal is used by the TXR Language project. At every release, TXR provides an official 32 bit and a 64 bit package for Cygwin, each represented as a .tar.gz to be unpacked in in the Cygwin root directory. The TXR project also releases native Windows packages, packaged as executable installers, based on the Nullsoft NSIS installation system. These use the Cygnal DLL.

The TXR executable in these two packages is exactly the same file; the installer-based version just ships with Cygnal. The Cygwin TXR exhibits behaviors appropriate to Cygwin; the Windows one exhibits behaviors appropriate to Windows. Yet, the Windows native version of TXR enjoys POSIX niceties, like using termios and VT100 codes for its interactive Lisp listener, and POSIX signal handling. When the user presses Ctrl-C to interrupt a computation in the TXR interactive listener, whether in the Cygwin or native version, this is implemented using POSIX signal handling; the same code that runs on Linux, Mac OS X, Solaris and elsewhere.

Miscellanea

Cygnal is not related in any way to a bankrupt Canadian company of the same name. It is also not related to Cygnal Integrated Products, a semiconductor company producing microcontrollers that was acquired by Silicon Laboratories, Inc. in 2003. "Cygnal" is a sort of portmanteau of "Cygwin" and the abbreviation "NAL" for "native application library". The name "Cygwin" was originally derived from Cygnus Solutions, which started the Cygwin project, now owned by Red Hat, Inc. "Cygnal" is too nice and meaningful a name for this project to give a 🐦💩 who else is using it.