View on GitHub

Passionate programming for perfection and productivity




Short summary of what was going on during last 3 months.

Enhancements to GNUstep frameworks


Release 0.90

Due to the high demand of various modern distributions support and the major changes to code, I’ve decided to make a new intermediate NEXTSPACE release - 0.90. During the preparation to release I plan to finish these tasks:

Take care of yourself and prepare for new release!


Hello evrybody!

I wrote news long time ago. If you think I’m out of business - no way! - I’m still here. I’ve finally put my hands onto GNUstep improvements that were waiting for good times.

Actually a bunch of good things have happend:

Most of the patches in Libraries/gnustep are gone and one patch was added: fixes pulldown menu display in NSPopupButton. This patch cannot be merged into GNUstep source tree for the simple reason: GNUstep tries to mimic the MacOS behavior which is not compatible to NEXTSTEP’s. Here are screenshots for the record of what my changes are (do you see the difference?):

Before After

As a result I’ve closed “Switch to the latest release of GNUstep” milestone. Although I need some time to check all the sharp edges which floats around due to use of HEAD GNUstep sources.

As you can see some improvements are fundamental, some - cosmetic. But all of this promises bright future to both GNUstep and NEXTSPACE projects.

P.S.: Do not hesitate to write some kind words to me! This is a fuel for open source developer’s engine (at least for me).

Stay tuned!


The summer has gone and it’s time for some news. I was quite busy with NEXTSPACE since 0.85 release during the summer time. I’ve created as ChangeLog file and periodically throw some info about progress there.

Short summary:

And last but not least NeXTSTEP compatible Help Panel! Just look at this:


You see original documentation for Workspace Manager (uses RTF, RTFD and TIFF formats) I’ve copied from OPENSTEP for development purposes. For obvious reasons it cannot be used as is in NEXTSPACE. If you have good English and like NEXTSPACE idea I encourage you to write documentation.


NEXTSPACE 0.85 is out. This is the first release that one can use without compiling - everything can be installed as RPMs.

Enjoy the NeXT!


Almost 2 months have passed since previous news and a lot of things happend.

First, I’ve decided to bake a new intermediate release of NEXTSPACE - 0.85. The main idea behind this intention is to present bunch of changes against 0.8 version (including genuine frameworks and applications). Here they are:

Second, almost all my patches to GNUstep libraries went upstream. Although I’ve decided to base 0.85 release on quite outdated version of GNUstep GUI and Back libraries - 0.25.0 (current version is 0.27.0). This is due to the 2 reasons: 1. I sticked to the ART GUI backend. 2. 0.25.1 version intruduced regresssion in string drawing (NSStringDrawing now has rewritten cache handling which works weird with ART backend). I will return to master branch of GUI and Back after I’ll be happy with NEXTSPACE functionality implementation.

So, for the next several weeks I plan to create the 0.85 release. After that I’ll continue to close issues tagged to 1.0 release.

Keep calm and be happy. :)


Last month was dedicated to several activities.

I’ve lost my writing permissions to GNUstep repository and pushing chages to GNUstep takes more time than I plan to spend. GNUstep art backend now marked as deprecated. IMHO cairo backend need more fixes to be considered as “production ready”. Despite of this, cairo backend looks promising and I’ll continue to make fixes and improvements to it. Meanwhile, current NEXTSPACE implementation will stick to art and outdated Base, GUI and Back.


Excercising with Linux audio subsystem I end up with SoundKit framework implementation :). It’s quite similiar to the NeXT’s one, however, due to asynchronous nature of PulseAudio it’s different in some places. This framework aimed to provide access to sound subsystem properties in quite simple fashion for both type of applications: mixer and player/recorder. I want it to have switchable backends (ALSA, PulseAudio, OSS). Here is a supposed code example:

#import <Fountation/Foundation.h>
#import <SoundKit/SoundKit.h>

- (void)playSound
  SKSoundServer *server;
  SKSoundOut    *output;
  SKSoundStream *stream;

  server = [[SKSoundServer alloc] initOnHost:nil
  output = [server defaultOutput];
  stream = [[SKSoundPlayStream alloc] initOnDevice:output];

  // some code to open sound file, decoding it's contents into `buffer`

  [stream playBuffer:buffer size:bufferSize];

  [stream release];
  [output release];

  [server disconnect];
  [server release];

The first task is to implement parts of SoundKit to have a working Mixer for sound properties adjustements: volume (common and application specific), mute, output/input port and profile selection. This task involves implementation of SoundServer, SoundDevice and SoundOut/SoundIn classes. The next task is implementation of stream classes for play/record.

For the testing purposes I created the Player application (very simple) with integrated Mixer.


More to come - stay tuned! Have a nice days!


Last month I’ve spent for exercises with Linux audio subsystems. Namely ALSA and PulseAudio. For that reason I’ve created a application Mixer inside Frameworks/Tests. There some results:

I need to finish PulseAudio code inside Mixer. Next is create NXSound implementation that can manage ALSA and PulseAudio with one set of methods.

Here are some screenshts of Mixer:

ALSA Mixer ALSA Mixer ALSA Mixer PulseAudio Mixer


I guess now I’ve fixed most of the focus switch issues. Moreover, now GNUstep GUI backend correctly process “Hide” and “Minimize Window” operations with respect to WM application state information. “Hide” sends message to WM. WM draws animation of hiding application and mark application windows as hidden. This is very important to have GNUstep and WM vision synchronized.

For the record - there are several methods of performing such operations:

  • Hide - Cmd-h shortcut, right-click on Miniaturize window titlebar button, “Hide” right-click menu on appicon (for X11 applications only).
  • Miniaturize Window - Cmd-m, left-click on Miniaturize titlebar button For GNUstep applications these operations are handled differently then to X11 applications.

Now I’m developing inside NEXTSPACE environment. I suppose that more bugs will be revealed. However I’m switching to other project tasks (Preferences, Terminal).


Fixes, fixes, fixes… to focus management again.

Last couple of days I’ve tested focus management with IntelliJ IDEA. This application has interesting startup sequence from focus management point of view. Now WM became more mature in handling such applications.


I’ve finished documenting some aspect of focus management. Although extensive testing, fixing and polishing are ahead. Because of frequent crashes and logouts/logins, I make development inside VM. Once I’ll be happy with focus management feature, I move to real hardware. That’s where I can deal with sound, power, networking.


It seems that I’ve completed focus management task. Additinally I’ve managed to fix misterious unmap/map of appicon on double-click.

Next: I need to document all changes and describe concepts of focus management related things.


Several major changes in focus management task:

  1. GNUstep GUI backend activate application if TakeFocus message was received from WM.
  2. When GNUstep application deactivates main menu left managed by WM now. Considering change to GNUstep GUI backend, main menu can now be used to activate GNUstep application with WM’s wSetFocusTo() without direct calling of [NSApp activateIgnoringOtherApps:] (it’s implemented in XWActivateApplication).
  3. Cmd-Tab (Switch Panel) now creates list of applications (not windows). Switch to application that was openened on particular workspace switches to that workspace.

Next: double-click on appicon should switch to workspace where app was opened.


Latest update to CentOS 7.6.1810 brings some big changes. What I noticed is:


Last 2 weeks I was trying to marry GNUstep GUI backend focus management with WM’s. It’s quite hard task… But now I know how focus management works in GNUstep and X11. Next Workspace project tasks probably require more deep integration between GNUstep and WM.