Menu

Tree [aa1728] master /
 History

HTTPS access


File Date Author Commit
 BNExtension 2014-12-07 Pavel Pavel [3e79ab] SCL Praser/Viewer, MMS Packet Caption View enha...
 Dialogs 2025-03-07 pavel-ch pavel-ch [48b644] Service Release 0.80d 2025/03/07
 Docking 2023-10-30 pavel-ch pavel-ch [32ccf1] Parameterized MMS Max PDU size due to some serv...
 Embed 2017-04-28 pavel-ch pavel-ch [720cfa] Poll View Renamed and made permanent without af...
 Goose 2021-02-10 Mirosław Sobczak Mirosław Sobczak [e0e02b] GOOSE: timestamp in ethernet frame now in UTC
 Goose_ASN1_Model 2016-11-14 mireks mireks [82f2b2] + Goose explorer
 HexBox 2014-11-25 Pavel Pavel [3bc7b6] HexBox, packet view, XML enhanced
 IEC61850.Server 2024-08-29 pavel-ch pavel-ch [30d8cc] Service Release 0.80b 2024/08/29
 InnoSetup 2025-04-18 Mirosław Sobczak Mirosław Sobczak [aa1728] LogError when GooseSender or GooseExplorer can'...
 MMS_ASN1_Model 2015-01-09 pavel-ch pavel-ch [485a0a] Debugging Iso layers 1st phase
 Properties 2023-10-30 pavel-ch pavel-ch [32ccf1] Parameterized MMS Max PDU size due to some serv...
 Resources 2023-10-30 pavel-ch pavel-ch [32ccf1] Parameterized MMS Max PDU size due to some serv...
 SCL_Parser 2016-11-14 mireks mireks [82f2b2] + Goose explorer
 TreeViewAdv 2023-10-30 pavel-ch pavel-ch [32ccf1] Parameterized MMS Max PDU size due to some serv...
 Views 2025-04-18 Mirosław Sobczak Mirosław Sobczak [aa1728] LogError when GooseSender or GooseExplorer can'...
 bin 2025-03-07 pavel-ch pavel-ch [48b644] Service Release 0.80d 2025/03/07
 org 2016-03-22 pavel-ch pavel-ch [4c2897] SCLServer, SCLParserDOM.cs - unfinished. BERDec...
 packages 2016-11-14 mireks mireks [82f2b2] + Goose explorer
 .editorconfig 2020-03-24 Mirosław Sobczak Mirosław Sobczak [11d547] GooseControl.* NumericUpDown don't needs to con...
 .gitignore 2021-11-10 Mirosław Sobczak Mirosław Sobczak [e23d31] Report View added support for general adn dirGe...
 ActionRequested.cs 2018-01-30 MirSob MirSob [8e32ed] IEDExplorer Commit desc
 CommAddress.cs 2014-11-30 Pavel Pavel [726fa1] SCL View - begin of works
 CommandParams.cs 2019-02-28 pavel-ch pavel-ch [838275] SBO(w) Commands supported
 EmbeddedAssembly.cs 2016-03-19 Pavel Pavel [9bc11d] Embedding iec61850.dll and iec61850dotnet.dll. ...
 Env.cs 2022-12-20 pavel-ch pavel-ch [b336b4] Service release 0.79s 2022/12/20
 ExportListViewToCSV.cs 2016-11-14 mireks mireks [82f2b2] + Goose explorer
 FileTransferState.cs 2016-11-14 mireks mireks [82f2b2] + Goose explorer
 IEDExplorer.csproj 2025-04-18 Mirosław Sobczak Mirosław Sobczak [aa1728] LogError when GooseSender or GooseExplorer can'...
 IEDExplorer.sln 2019-10-08 pavel-ch pavel-ch [20533c] Rel 0.79h
 Iec61850Controller.cs 2024-11-19 pavel-ch pavel-ch [c9ad01] Service Release 0.80c 2024/11/19
 Iec61850Model.cs 2019-03-03 Pavel Pavel [f3efce] Corrected regression imported from GOOSE code -...
 Iec61850State.cs 2021-04-27 pavel-ch pavel-ch [69a4a0] Better control of Read behaviour
 Iec61850StateEnum.cs 2016-11-14 mireks mireks [82f2b2] + Goose explorer
 Iedexplorer.ico 2016-03-19 Pavel Pavel [9bc11d] Embedding iec61850.dll and iec61850dotnet.dll. ...
 IniFileManager.cs 2020-03-24 Mirosław Sobczak Mirosław Sobczak [11d547] GooseControl.* NumericUpDown don't needs to con...
 IsoAcse.cs 2016-11-14 mireks mireks [82f2b2] + Goose explorer
 IsoConnectionParameters.cs 2023-10-30 pavel-ch pavel-ch [32ccf1] Parameterized MMS Max PDU size due to some serv...
 IsoCotp.cs 2017-09-02 pavel-ch pavel-ch [32cc18] Iso connection reuse
 IsoLayers.cs 2016-11-14 mireks mireks [82f2b2] + Goose explorer
 IsoPres.cs 2016-11-14 mireks mireks [82f2b2] + Goose explorer
 IsoProtocolState.cs 2016-11-14 mireks mireks [82f2b2] + Goose explorer
 IsoSess.cs 2016-11-14 mireks mireks [82f2b2] + Goose explorer
 IsoTpkt.cs 2015-01-13 pavel-ch pavel-ch [5eb96a] ISO Layers finished and working. Still some TOD...
 IsoTpktState.cs 2016-11-14 mireks mireks [82f2b2] + Goose explorer
 IsoUtil.cs 2015-01-18 Pavel Pavel [bf3d1c] ConnParamDialog - continue works
 LICENSE.GPL3.txt 2013-05-29 Pavel Pavel [86b2bb] Initial Commit @rev 0.1
 ListViewExtender.cs 2016-11-14 mireks mireks [82f2b2] + Goose explorer
 Logger.cs 2021-11-10 Mirosław Sobczak Mirosław Sobczak [e23d31] Report View added support for general adn dirGe...
 MMSCapture.cs 2014-11-28 Pavel Pavel [39f313] Capture - continuous works
 MMSCaptureDb.cs 2016-11-14 mireks mireks [82f2b2] + Goose explorer
 MainWindow.Designer.cs 2014-11-04 pavel-ch pavel-ch [951e55] New UI - begin with new libraries. Command Dial...
 MainWindow.cs 2014-11-04 pavel-ch pavel-ch [951e55] New UI - begin with new libraries. Command Dial...
 MainWindow.resx 2014-10-16 Pavel Pavel [6ef77c] Logging level combo
 MyTabControl.cs 2016-11-14 mireks mireks [82f2b2] + Goose explorer
 MyTreeView.cs 2016-11-14 mireks mireks [82f2b2] + Goose explorer
 NodeBase.cs 2018-01-30 MirSob MirSob [8e32ed] IEDExplorer Commit desc
 NodeDO.cs 2020-08-24 p p [b0411c] Enhancement: SCL data marked with CDC name from...
 NodeData.cs 2024-08-29 pavel-ch pavel-ch [77278a] SCL Server / Allowed any length of written bits...
 NodeFC.cs 2015-12-03 Pavel Pavel [fa96c1] Model file generator for libiec61850 / first st...
 NodeFile.cs 2017-05-26 pavel-ch pavel-ch [9552dd] File directory listing enhanced
 NodeGData.cs 2018-01-30 MirSob MirSob [8e32ed] IEDExplorer Commit desc
 NodeGVL.cs 2018-01-30 MirSob MirSob [8e32ed] IEDExplorer Commit desc
 NodeIed.cs 2016-11-14 mireks mireks [82f2b2] + Goose explorer
 NodeLD.cs 2016-01-15 pavel-ch pavel-ch [4f0234] Some details to CFG export
 NodeLN.cs 2016-01-15 pavel-ch pavel-ch [4f0234] Some details to CFG export
 NodeRCB.cs 2025-03-07 pavel-ch pavel-ch [48b644] Service Release 0.80d 2025/03/07
 NodeTypeEnum.cs 2013-05-29 Pavel Pavel [86b2bb] Initial Commit @rev 0.1
 NodeVL.cs 2016-11-14 mireks mireks [82f2b2] + Goose explorer
 NodeVLM.cs 2016-04-21 pavel-ch pavel-ch [710f8b] SCLParserDOM2.cs - new review
 Program.cs 2017-05-03 pavel-ch pavel-ch [130098] Integration of Mireks features:
 README.txt 2025-04-18 Mirosław Sobczak Mirosław Sobczak [aa1728] LogError when GooseSender or GooseExplorer can'...
 RcbActivateParams.cs 2016-11-14 mireks mireks [82f2b2] + Goose explorer
 SCLParser.cs 2016-04-04 pavel-ch pavel-ch [040393] Editing values in SCL Server model.
 SCLParserDOM.cs 2016-04-07 pavel-ch pavel-ch [38c90a] SCL server enhancements, debugging - writing va...
 SCLParserDOM2.cs 2020-08-24 p p [b0411c] Enhancement: SCL data marked with CDC name from...
 SCLServer.cs 2024-08-29 pavel-ch pavel-ch [30d8cc] Service Release 0.80b 2024/08/29
 Scsm_MMS.cs 2025-04-18 Mirosław Sobczak Mirosław Sobczak [95c470] Scsm_MMS_Worker.cs, Scsm_MMS.cs: using SendQu...
 Scsm_MMS_Worker.cs 2025-04-18 Mirosław Sobczak Mirosław Sobczak [95c470] Scsm_MMS_Worker.cs, Scsm_MMS.cs: using SendQu...
 StringToDataConverter.cs 2016-11-14 mireks mireks [82f2b2] + Goose explorer
 TODO.TXT 2015-12-02 Pavel Pavel [bbc967] Model file generator for libiec61850 / first steps
 TcpProtocolState.cs 2016-11-14 mireks mireks [82f2b2] + Goose explorer
 TcpRw.cs 2018-01-30 MirSob MirSob [8e32ed] IEDExplorer Commit desc
 TcpState.cs 2016-11-14 mireks mireks [82f2b2] + Goose explorer
 WriteQueueElement.cs 2016-11-14 mireks mireks [82f2b2] + Goose explorer
 app.config 2023-10-30 pavel-ch pavel-ch [32ccf1] Parameterized MMS Max PDU size due to some serv...
 scsm_MMS_TypeEnum.cs 2016-04-02 pavel-ch pavel-ch [7e3404] Tcp - disconnect recogniition

Read Me

========================  LICENSES ========================
/*
 *  Copyright (C) 2013-2023 Pavel Charvat
 * 
 *  This file is part of IEDExplorer.
 *
 *  IEDExplorer is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  IEDExplorer is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with IEDExplorer.  If not, see <http://www.gnu.org/licenses/>.
 */

IEDExplorer uses Binary Notes ASN.1 software library:

/*
* Copyright 2006 Abdulla G. Abdurakhmanov (abdulla.abdurakhmanov@gmail.com).
* 
* Licensed under the LGPL, Version 2 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* 
*      http://www.gnu.org/copyleft/lgpl.html
* 
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* 
* With any your questions welcome to my e-mail 
* or blog at http://abdulla-a.blogspot.com.
*/


========================  IEDExplorer ========================


The IEDExplorer project has been created in my free time in order to learn the IEC61850 protocol.
The result is the only (as I have seen over Internet) pure .net managed MMS stack (not complete yet)
and a very basic IEC61850 MMS client implementation.

The code is NOT in production quality, written by a non-professional programmer:
- it completely lacks tests
- it uses Binary Notes implementation of MMS ASN.1 encoding/decoding, which is relatively
  slow in the C# flavour, thus not really suitable for a serious usage
- it has a simplistic UI and UI bindings (needs some refactoring)
- IEC61850 is modelled in a very simple manner, and model is incomplete (refactoring needed)
- the MMS client side only has been implemented

On the other side:
- it works (at least for me on some test setups)
- it has already helped me in some situations in debugging 61850 communications
- it has a big potential for improvement
- it can be a free alternative to some commercial test utilities
- it runs under Windows and under Linux/Mono

The project is looking for enthusiastic programmers who want to explore the mysterious
world of IEC61850 protocol.

Rev 0.1 2013/05/29
The first release 0.1 is an "as is" copy of the last development.

Rev 0.2 2013/11/01
The second release 0.2 : some enhacements in using DNS results/IP address. Most recent IP list.

Rev 0.3 2014/03/19
Some changes to make libiec61850 based server communication working.

Rev 0.4 2014/03/21
Reading variables from libiec61850 server working. Accepting reports without variable references.

Rev 0.5 2014/10/24
RP blocks have own tree.
Added NodeRP.cs
Boolean sent with 0x01.
Commands as a structure - working prototype for single commands direct.
Logging level combo.
Inspecting ied without defined lists possible, for example some libiec61850 samples.
Support for reading Arrays.

Rev 0.6 2014/11/04
New UI - begin with new libraries. Command Dialog - continue

Rev 0.7
Packet capture finished. New UI.

Rev 0.71 2014/12/07
SCL File View added thanks to Joel Kaiser.

Rev 0.72 2015/01/27
ISO layers are fully implemented now - ported from libiec61850. Thanks to the original author Michael Zillgith.
It is possible to set parameters for ISO COTP, Session and Presentation layers.
SCL View enhanced, resp. added some features from Joel Kaiser's version.

Rev 0.73 2015/02/17
Minor debug release / File Directory dialogs

Rev 0.74 2015/04/10
Minor debug release / ISO Session initialization

Rev 0.75 2015/10/21
* ISO COTP implemented sending of long data
* Report inclusion string - improved reading of reports
* New RCB Activation Dialog with Right/click on (U)RCB
* UI insulation (some internal refactoring)
* Support for buffered reports
* Reading of values with variable list
* File handling - icons
* Auto update for data window
* Delete NVL action - bugfix
* Enabled concurrent queries - InvokeId dictionary transactions queue
* Multithreading enabled for Write
* LogView context menu re-enabled (victim of internal refactoring)

Rev 0.76 2015/11/11
* Autoupdate - removed bug when reading higher level nodes (IED, LD, LN)
* Better readibility of octet_string values (converted to hex)
* Save Data button for IED Data view - save data view incl. values to TXT file for reference

Rev 0.77 2016/01/18
* SCSM_MMS: InvokeId - autoPurge (internal functionality)
  Stop Autorefresh (cyclic read) on unsuitable nodes (mostly in IEC View)
* Saving CFG - split dialog, saveModel methods.
  Bug correction - threading issue in Scsm_MMS_Worker.cs. Seen on the VMs.
  Iec tree member nodes marked
* Saving libiec61850 model file (CFG) - the feature is not yet fully finished
* IEC structure view - tree.
* reading binary_time + forgotten icon
* Refresh data button in IED data view
* Short fix DA/DO Type
* small modification in TCP/RW
* IEC data model - some first ideas
* Collapse/Expand in tree. Some more DA/DO logic.

Rev 0.77b 2016/02/04
(Service release)
* Writing of unsigned and integer values
* Test XML DOM parser for SCL Parser and View
* SCL Parser and View - more IEDs from SCD can be read in. Some improvement in parser, parser made non-static
* Small correction in variables precedence in RCB activation dialog. Icon for EXE made explicit.


Rev 0.78 experimental SCLServer release 2016/04/23
This release is an experimental release with a new feature:
IEC61850 SERVER representing data from a loaded SCL file = SCL Server
SCL Server uses libiec61850.dll and its .net extension libiec61850dotnet.dll
Both libraries are embedded in the .exe
How to use the feature:
Load a valid SCL file.
SCL Server can be run by a right-click on the IED name in the SCL tree view, select Run SCLServer
Values in the SCL Server can be changed manually only a.t.m. - right click in the SCL View Window
Changed values should be visible for all connected IEC61850 clients via reads and reporting.
GOOSE messaging and sampled values are not implemented.

SCLServer is in ALPHA experimental state!!!
SCLServer may be separated into an independent exe in the future!!!

Shortened commit review:
* SCLParserDOM2.cs - new review of SCL paresr
* SCL server enhancements, debugging - writing values
* Editing values in SCL Server model.
* Inclusive reporting with configured TrgOps.
* Tcp - disconnect recogniition
* SCLServer - initial values
* SCLView - changing values (manually)
* initial values from SCL
* SCL Arrays handling
* sub data objects from SCL
* CSL Parser - SDOs, arrays
* Enhancing SCL Server and SCL Parser
* SCLServer, SCLParserDOM.cs - unfinished. BERDecoder change - Vadim Evseev.
* SCLServer
* IEC61850.Server
* Embedding iec61850.dll and iec61850dotnet.dll. Test client in SclServer.cs.
* SCL view: DOs to LNs, icons
* SCL read into iec structure
* Watch View initial
* AutoUpdateStoppedDialog.cs
* SCLParserDOM.cs
* Viewing SCL files - SCL View
* Handling of dynamic DataSets finished

Rev 0.79 experimental SCLServer & GOOSE release 2017/03/05
This release is an experimental release with a new feature:
GOOSE functions.

* Integration of Mireks features:
- Goose Sender + Data Editor
- Goose Explorer
- Polling list
- Reports list (still ongoing)
Features are mostly UNTESTED.
- Env optimizations

* Poll View Renamed and made permanent without affecting application closing
* Some changes for resding files, a choice not to read data model values on startup
* Purge Mireks commits - delete binary files
* Correction to sending command from contextmenu on Data node
* + Goose explorer
+ Goose sender
+ Report event viewer
+ PoolViewer with Drag'N'Drop
* Workaround for initial READs

Service release 0.79b 2017/05/09
- reading SCL files
- Owner RCB field readable
- more TCP errors catched

Service release 0.79c 2017/06/22
- Copy names from IedDataView
- File directory listing enhanced

Service release 0.79d 2017/06/26
- Timestamp quality bits listing
- List GOOSE interfaces - Windows texts

Service release 0.79e 2019/01/10
* Read Test flag from CommandDialog
* NodeDO.cs: base type for NodeDO should be NodeData for keep working Enable All RCB and for ActivateNVL
* Iec61859Controller.cs: ActivateNVL is uncommented
* EntryID is a 8 byte length value I've added possiblity to write 8byte 00-00-00-00-00-00-00-00
    value to server to reset EntryID in BRCB
* added GooseCnt
* added File Delete command
* autoreconnect feature (corrected)
* Stop pooling if PoolView form is closed
* Restored feature to edit file name before GetFile and GetFileList to test server behavior
* extended information about Quality of data and Time
* Added parsing of embedded structured data, Logging Write Response
* Writing float commands
* Iso connection reuse
* bitstring write
* datetime write
* Cosmetics
* Find Form Update
* Find dialog
* Time format (milliseconds) - leading zeroes
* Service release 0.79d 2017/06/26
* List GOOSE interfaces - Windows texts
* cosmetics
* List GOOSE interfaces
* Copy names from IedDataView
* File directory listing enhanced

Service release 0.79f 2019/02/28
* Move to .net CLR ver 4.5
* Better Write response diagnostic support
* LastApplError unconfirmed PDU diagnostics support
* SBO(w) Commands supported (Select / Operate by hand or in an automatic sequence)
* Better Control Service diagnostics support

Service release 0.79g 2019/07/17
* Check bits in command dialogs now working

Service release 0.79h 2019/10/08
* Mireks contribution:
* I've created InnoSetup project to create Setup.exe. For that reason I've added to project file INNO_SETUP define for contitional compilation.
Logger.cs and MainWindow.cs are affected.
This changes also alows to start multiple instances of IEDExplorer I've replaced tmpFile with random filename and IniFiles I've moved to LocalUserAppDataPath,
but this is only active with INNO_SETUP defined in project file

Scsm_MMS.cs:  Added parsing of structured data (i.e. Tr, Str) in ReportView.

OctetString can't be stored as object(string) because of following error:
  byte[] bin = { 0x58, 0x1f, 0x61, 0x5d, 0xc6, 0,0,0 };
  object DataValue = System.Text.ASCIIEncoding.ASCII.GetString(bin);
  byte[] bout = System.Text.ASCIIEncoding.ASCII.GetBytes((String)DataValue);
  bin != bout

for byte octet values > 0x7F after conversion with GetString and reverse GetBytes values are not properly converted.
I've changed to storing octetstring as byte[].
NodeData.StringValue and NodeRCB.EntryID properties are modified. I have tested this for EntryID.
EditValue dialog is also changed to fit this problem.

Service release 0.79i 2019/11/02
Ticket resolved: #16 GooseSender: VLAN: VID and Priority settings don't work
GOOSE Sender: When I set VLAN flag in GooseSender , VID and Priority do not follow the settings but remain fixed (VID = 50, Priority = 1).

Fields Priority, CFI and VID are now followed when building packet.

Service release 0.79j 2020/03/28
- Server DataObjects not sorted (keep ICD/SCD order)
- Enhancements thanks to Mirek Sobczak
	* IniFileManager.cs try/catch block when ini file is corrupted
	* GooseControl.* NumericUpDown don't needs to confirmed with Enter Key
	* Scsm_MMS.cs seconds variable in Timestamp now is usigned acording to IEC61850 v2
	* .gitignore contains additional file types to ignore. this helps during git push
	* IedTreeView.cs - Enable All RCB is splited into Enable All URCB and Enable All BRCB
	* MainWindow.cs - version info 'i' -> 'j'
	* New InnoSetup IEDExplorer_setup.exe

Service release 0.79k 2020/08/24
- Enhancement: SCL data marked with CDC name from SCL file (specifically suitable for SIEMENS TOOLBOX II/SICAM data input)

Service release 0.79l 2021/02/10
    BugFix to GOOSE timestamp issue from 2020-10-23. Timestamp increases only after new event/state comes
    GOOSE: timestamp in ethernet frame now in UTC
    Remark: new version is added to https://sourceforge.net/p/iedexplorer/code/ci/master/tree/InnoSetup/SetupDir/IEDExplorer_setup.exe

Service release 0.79m 2021/04/27
    Better control of Read behaviour.
	Reading of iec61850bean based servers enabled, when Read Values (on startup) and Read with Specification are both switched OFF
	
Service release 0.79n 2021/11/12
	Report View added support for general adn dirGeneral DA and for cVal
	Corrected regression imported from GOOSE code - malfunction in SCL files read-in.
	Still needs tests.
	Command handling SBO vs. SBOw acc. to standard, not tested yet

Service release 0.79o 2022/04/14
    Report View added support for MMXN$x$mag values
    AboutDialog prints it self compilation date

Service release 0.79p 2022/08/10
    To RcbActivateDialog are added two checkBoxes to set or clear all "send checkboxes". Useful if someone wants to send only one value.

Service release 0.79q 2022/08/10
    To RcbActivateDialog are added two checkBoxes to set or clear all "send checkboxes". Useful if someone wants to send only one value.
    Now looks on RCB type Buffered or Unbuffere

Service release 0.79r 2022/08/31
    Bug in decoding description attribute in Reports View

Service release 0.79s 2022/12/20
    Enable creating new DataSet in a LD without fixed datasets
    Function Communication AutoRestart by default OFF to avoid side effects
    Some dialogs (Command, RCB Activation) centered on main window

Release 0.80 2023/02/06
	Version 0.80
	Listing of DataSet variables in IED data view
	Using .Net 4.5.2 instead of 4.5

Service Release 0.80a 2023/10/30
	Parameterized MMS Max PDU size due to some servers issuing big PDUs
	Using .Net 4.8 instead of 4.5.2
	
Service Release 0.80b 2024/08/29
	Catched some errors on SCL File redaing (initialization of values)
	SCL Server - bitstring write enabled

Service Release 0.80c 2024/11/19
	Catched some errors in command dialogue initialization - Log entry instead of a crash

Service Release 0.80d 2025/03/07
	ResvTms UInt -> Int

Service Release 0.80e 2025/04/18
    Bug in activation ReportControlBlocks for all existing Datasets
    Deactivation All ReportControlBlocks Set to false 'Resv' also
    ReportView correction in decoding measuring for cVal.mag.f and mag.f 
    LogError when GooseSender or GooseExplorer can't be open (Npcap driver is not installed or installed not in WinPcap mode).
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.