Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace libbson with cJSON #408

Closed
ThomasAdam opened this issue Jan 17, 2021 · 2 comments · Fixed by #571
Closed

Replace libbson with cJSON #408

ThomasAdam opened this issue Jan 17, 2021 · 2 comments · Fixed by #571
Assignees
Labels
type:breaking Issue is not backwards-compatible and will break configs/build type:new-feature Brand new feature not yet present in fvwm3
Milestone

Comments

@ThomasAdam
Copy link
Member

ThomasAdam commented Jan 17, 2021

Currently, fvwm3 uses libbson (from mongodb) to send JSON information between fvwm3 and modules, but also to the end-user (via the Status command). One nice property of libbson is that the API it uses to compose JSON is quite compact (and hence less verbose). However, there are a few downsides:

  • libbson is tangled with mongodb and is not packaged well across Linux/BSD to the point where downstream packagers have had to package libbson as a prerequisite dependency, placing more burden on the maintainer.
  • libbson is very memory-intensive, relative to what it is doing (JSON).

Other alternatives exist. However, in thinking about the amount of JSON that fvwm3 could use, there is very little IPC involving large amounts of data where we care about compressing it, and hence introducing that API.

cJSON has a good enough API that we could use that to send JSON, and has the advantage that it's small enough to be embedded directly in fvwm3's source repository, without needing another external dependency.

This therefore removes the dependency on libbson from fvwm3, and since cJSON is part of the source tree, no other external dependency is required.

@ThomasAdam ThomasAdam added help wanted Development help required (see `difficulty:*`) type:new-feature Brand new feature not yet present in fvwm3 difficulty:gfi Issue is suitable for a first-time contributor/developer labels Jan 17, 2021
@lgsobalvarro
Copy link
Contributor

Yes. Msgpack is available in the main OpenSUSE repos. That means that OpenSUSE (and by extension SUSE and Gecko users) wouldn't have to add an extra repo (databases) in order to be able to use fvwm3.

I would also be able to maintain a fvwm3 package via Open Build Services for OpenSUSE without any issues.

@BrianA-MN
Copy link

Both libbson, mongodb, and msgpack are available for Slackware users in the Slackbuilds repository. Although not accepted by the Slackware maintainer, Slackbuilds.org is available to all Slackware users and maintains higher than normal testing of submissions from packagers to assure they don't break something else or conflict with standard packages. HTH.

@ThomasAdam ThomasAdam added this to the 1.0.4 milestone May 31, 2021
@ThomasAdam ThomasAdam changed the title Replace libbson with msgpack Replace libbson with cJSON Jun 26, 2021
@ThomasAdam ThomasAdam added type:breaking Issue is not backwards-compatible and will break configs/build and removed difficulty:gfi Issue is suitable for a first-time contributor/developer help wanted Development help required (see `difficulty:*`) labels Jun 26, 2021
ThomasAdam added a commit that referenced this issue Jul 8, 2021
Rather than relying on libbson to supply a convenient wrapper to
creating JSON fragments, instead use a dedicated/embeddable C API to
achieve the same result.

Although libbson might be fast, there simply isn't enough JSON being
used as an IPC mechanism for the overhead of using libbson.  By
overhead, this is referring to the fact that not every linux
distribution or BSD have packaged bson, or have a new enough version of
it.

Fixes #408
ThomasAdam added a commit that referenced this issue Jul 8, 2021
As with the 'Status' command in fvwm, replace the BSON implementation
with cJSON.

Fixes #408
ThomasAdam added a commit that referenced this issue Jul 8, 2021
libbson has been replaced with a dedicated JSON C API (cJSON), so
there's no longer a requirement to check for libbson any longer.

Fixes #408
@ThomasAdam ThomasAdam self-assigned this Jul 8, 2021
ThomasAdam added a commit that referenced this issue Jul 8, 2021
Rather than relying on libbson to supply a convenient wrapper to
creating JSON fragments, instead use a dedicated/embeddable C API to
achieve the same result.

Although libbson might be fast, there simply isn't enough JSON being
used as an IPC mechanism for the overhead of using libbson.  By
overhead, this is referring to the fact that not every linux
distribution or BSD have packaged bson, or have a new enough version of
it.

Fixes #408
ThomasAdam added a commit that referenced this issue Jul 8, 2021
As with the 'Status' command in fvwm, replace the BSON implementation
with cJSON.

Fixes #408
ThomasAdam added a commit that referenced this issue Jul 8, 2021
libbson has been replaced with a dedicated JSON C API (cJSON), so
there's no longer a requirement to check for libbson any longer.

Fixes #408
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this issue Aug 20, 2021
# Changelog

## [1.0.4](https://github.com/fvwmorg/fvwm3/tree/1.0.4) (2021-07-17)

[Full Changelog](fvwmorg/fvwm3@1.0.3...1.0.4)

**Breaking changes:**

- Deprecate Label for FvwmPager [\#342](fvwmorg/fvwm3#342)
- Extend \*FvwmIconMan:Resolution to include specific Desktop / Pager [\#455](fvwmorg/fvwm3#455)
- Replace libbson with cJSON [\#408](fvwmorg/fvwm3#408)
- FvwmButtons: Shrink windows when honoring Hints. [\#577](fvwmorg/fvwm3#577) ([somiaj](https://github.com/somiaj))
- Replace libbson with cJSON [\#571](fvwmorg/fvwm3#571) ([ThomasAdam](https://github.com/ThomasAdam))
- Add commands to configure the size/position window. [\#558](fvwmorg/fvwm3#558) ([ThomasAdam](https://github.com/ThomasAdam))
- Retire FvwmTile and FvwmCascade wrappers. [\#515](fvwmorg/fvwm3#515) ([somiaj](https://github.com/somiaj))

**Implemented enhancements:**

- Set min. size for windows shown in pager [\#542](fvwmorg/fvwm3#542)
- Moving windows: allow for "warping" to other windows in a given direction [\#540](fvwmorg/fvwm3#540)
- Update monitor struct to know if monintor edges are OUTSIDE\_EDGE or INSIDE\_EDGE [\#523](fvwmorg/fvwm3#523)
- Two issues with the WindowList [\#151](fvwmorg/fvwm3#151)
- Feature Request: Enable using the 'c' unit with the "MinWindowSize" and "MaxWindowSize" styles [\#145](fvwmorg/fvwm3#145)
- Allow per monitor EdgeCommand and EdgeLeaveCommand [\#582](fvwmorg/fvwm3#582) ([somiaj](https://github.com/somiaj))
- expand: add prev\_{desk,pagex,pagey} [\#579](fvwmorg/fvwm3#579) ([ThomasAdam](https://github.com/ThomasAdam))
- Improve translations [\#568](fvwmorg/fvwm3#568) ([somiaj](https://github.com/somiaj))
- Cleanup SetRCDefaults\(\) [\#567](fvwmorg/fvwm3#567) ([somiaj](https://github.com/somiaj))
- Add local configuration file to the default-config. [\#557](fvwmorg/fvwm3#557) ([somiaj](https://github.com/somiaj))
- Add icon for Run Command. [\#552](fvwmorg/fvwm3#552) ([somiaj](https://github.com/somiaj))
- Add command: Move shuffle \[flags\] direction\(s\) [\#550](fvwmorg/fvwm3#550) ([somiaj](https://github.com/somiaj))
- expand: add desk, pagex, pagey variables [\#539](fvwmorg/fvwm3#539) ([ThomasAdam](https://github.com/ThomasAdam))
- Add a screen option to the Scroll command. [\#531](fvwmorg/fvwm3#531) ([ThomasAdam](https://github.com/ThomasAdam))
- RandR: support RandRFunc for screen changes [\#525](fvwmorg/fvwm3#525) ([ThomasAdam](https://github.com/ThomasAdam))

**Fixed bugs:**

- Pager do not show smalls windows in the correct place when snapped to the edge [\#541](fvwmorg/fvwm3#541)
- EwmhBaseStruts glitch when using screen with different resolutions [\#66](fvwmorg/fvwm3#66)
- Fvwm segfaults parsing module configuration [\#575](fvwmorg/fvwm3#575)
- Swallowing FvwmPager inside FvwmButtons breaks resizing FvwmButtons when aspect ratio resizing is used [\#573](fvwmorg/fvwm3#573)
- Move X Y Warp doesn't move pointer to window. [\#551](fvwmorg/fvwm3#551)
- Maximize fullscreen command does not clear \_NET\_WM\_STATE\_FULLSCREEN when exiting fullscreen [\#545](fvwmorg/fvwm3#545)
- EdgeLeaveCommand don't work or need a page change to work [\#543](fvwmorg/fvwm3#543)
- FvwmPager Icon view fix background color. [\#537](fvwmorg/fvwm3#537)
- FvwmPager with bad aspect ratio on dual-head display [\#522](fvwmorg/fvwm3#522)
- AnimatedMove [\#513](fvwmorg/fvwm3#513)
- Spelling errors found by lintian. [\#511](fvwmorg/fvwm3#511)
- SnapAttraction: take into account individual monitors [\#466](fvwmorg/fvwm3#466)
- FvwmPager not taking into account global screen dimensions when configured with DeskTopScale [\#223](fvwmorg/fvwm3#223)
- FvwmPager: moving windows inside FvwmPager is inconsistent [\#198](fvwmorg/fvwm3#198)
- Add force\_icons\_size kludge to .stalonetrayrc. [\#581](fvwmorg/fvwm3#581) ([somiaj](https://github.com/somiaj))
- Fix pass through binding logic. [\#570](fvwmorg/fvwm3#570) ([somiaj](https://github.com/somiaj))
- Make default-config greyed colorset grey. [\#566](fvwmorg/fvwm3#566) ([somiaj](https://github.com/somiaj))
- Cleanup FvwmScript manual page. [\#565](fvwmorg/fvwm3#565) ([somiaj](https://github.com/somiaj))
- GNOME: remove DO\_IGNORE\_GNOME\_HINTS [\#556](fvwmorg/fvwm3#556) ([lgsobalvarro](https://github.com/lgsobalvarro))
- Unmaximize: restore \_NET\_WM\_STATE [\#546](fvwmorg/fvwm3#546) ([ThomasAdam](https://github.com/ThomasAdam))
- Fix compiler warnings in modules/FvwmScript/Instructions.c [\#544](fvwmorg/fvwm3#544) ([pm215](https://github.com/pm215))
- Rework FvwmPager to move windows easier [\#536](fvwmorg/fvwm3#536) ([ThomasAdam](https://github.com/ThomasAdam))
- Move: disable working area when screen given [\#535](fvwmorg/fvwm3#535) ([ThomasAdam](https://github.com/ThomasAdam))
- Make RightPanel use primary monitor dimensions. [\#530](fvwmorg/fvwm3#530) ([somiaj](https://github.com/somiaj))
- Set base struts only for primary monitor in default-config. [\#528](fvwmorg/fvwm3#528) ([somiaj](https://github.com/somiaj))
- Change FvwmPager Logic for initial window size. [\#527](fvwmorg/fvwm3#527) ([somiaj](https://github.com/somiaj))
- EWMH\_GetWorkArea use monitor dimensions. [\#526](fvwmorg/fvwm3#526) ([somiaj](https://github.com/somiaj))
- Make SnapAttraction snap to edges of all monitors. [\#521](fvwmorg/fvwm3#521) ([somiaj](https://github.com/somiaj))
- Update FvwmCommand to allow multiple args. [\#514](fvwmorg/fvwm3#514) ([somiaj](https://github.com/somiaj))

**Merged pull requests:**

- Extend FvwmIconMan Resolution configuration. [\#561](fvwmorg/fvwm3#561) ([somiaj](https://github.com/somiaj))
- Allow Min/Max WindowSize style to use client size [\#560](fvwmorg/fvwm3#560) ([somiaj](https://github.com/somiaj))
- Add more columns to default-config menu ItemFormat. [\#559](fvwmorg/fvwm3#559) ([somiaj](https://github.com/somiaj))
- Fix broken link. [\#529](fvwmorg/fvwm3#529) ([somiaj](https://github.com/somiaj))
- Spelling error fixes. [\#512](fvwmorg/fvwm3#512) ([somiaj](https://github.com/somiaj))
- Working on 1.0.4 [\#509](fvwmorg/fvwm3#509) ([ThomasAdam](https://github.com/ThomasAdam))
- module expand: don't overwrite previous expansion [\#576](fvwmorg/fvwm3#576) ([ThomasAdam](https://github.com/ThomasAdam))
- conditional: fix whitespace/comma parsing [\#572](fvwmorg/fvwm3#572) ([ThomasAdam](https://github.com/ThomasAdam))
- Configure a colorset for XDGMenu options. [\#564](fvwmorg/fvwm3#564) ([somiaj](https://github.com/somiaj))
- Menu: add option to grey entries out [\#563](fvwmorg/fvwm3#563) ([ThomasAdam](https://github.com/ThomasAdam))
- Remove \*FvwmPager: Label configuration option. [\#562](fvwmorg/fvwm3#562) ([somiaj](https://github.com/somiaj))
- move: Warp: move pointer to centre of window [\#553](fvwmorg/fvwm3#553) ([ThomasAdam](https://github.com/ThomasAdam))
- FvwmPager: Improvments with dealing with tiny windows on tiny pagers. [\#548](fvwmorg/fvwm3#548) ([somiaj](https://github.com/somiaj))
- PanFrame improvements [\#547](fvwmorg/fvwm3#547) ([ThomasAdam](https://github.com/ThomasAdam))
- pager: teach Icon view about colorsets [\#538](fvwmorg/fvwm3#538) ([ThomasAdam](https://github.com/ThomasAdam))
- placement: fix mouse positioning [\#533](fvwmorg/fvwm3#533) ([ThomasAdam](https://github.com/ThomasAdam))
- EdgeScroll: a few improvements [\#524](fvwmorg/fvwm3#524) ([ThomasAdam](https://github.com/ThomasAdam))
- Update manual for Echo/EchoFuncDefinition [\#520](fvwmorg/fvwm3#520) ([somiaj](https://github.com/somiaj))
- release: remove dev-docs from release tarball [\#518](fvwmorg/fvwm3#518) ([ThomasAdam](https://github.com/ThomasAdam))
- configure: remove stale references to BUGADDR [\#517](fvwmorg/fvwm3#517) ([ThomasAdam](https://github.com/ThomasAdam))
- Configuration tweaks [\#516](fvwmorg/fvwm3#516) ([ThomasAdam](https://github.com/ThomasAdam))
- build: add CHANGELOG.md to dist [\#510](fvwmorg/fvwm3#510) ([ThomasAdam](https://github.com/ThomasAdam))
@ThomasAdam ThomasAdam moved this to Done in FVWM3 Sep 18, 2022
@ThomasAdam ThomasAdam added this to FVWM3 Sep 18, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type:breaking Issue is not backwards-compatible and will break configs/build type:new-feature Brand new feature not yet present in fvwm3
Projects
Status: Done
Development

Successfully merging a pull request may close this issue.

3 participants